もくじ
MatchListActivity.kt
package com.example.hoge import android.os.Bundle import android.widget.ImageView import android.widget.ListView import androidx.appcompat.app.AppCompatActivity import android.app.Activity import android.view.MenuItem import android.view.View import android.view.ViewGroup import android.widget.* class MatchListActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_match_list) var listView = findViewById<ListView>(R.id.listview); val customAdaptor = CustomAdaptor(this) listView.adapter = customAdaptor listView.setOnItemClickListener{ parent, view, position, id -> Toast.makeText(this, "You Clicked:"+" "+customAdaptor.name[position],Toast.LENGTH_SHORT).show() } // 戻るメニューの表示 supportActionBar?.setDisplayHomeAsUpEnabled(true) } /** * 戻るメニュー選択時の処理 */ override fun onOptionsItemSelected(item: MenuItem): Boolean { // 選択されたメニューが戻るの場合アクティビティ終了 if (item.itemId == android.R.id.home) { finish() } // 親クラスの同名メソッドを呼び出し、その戻り値を返却 return super.onOptionsItemSelected(item) } } class CustomAdaptor(private val context: Activity): BaseAdapter() { var name = arrayOf("和恵 ", "エイミー ", "和恵v2 ") var age = arrayOf("27歳", "30歳", "29歳") var image = intArrayOf(R.drawable.girl1, R.drawable.girl3, R.drawable.girl1) override fun getView(p0: Int, p1: View?, p2: ViewGroup?): View { val inflater = context.layoutInflater val view1 = inflater.inflate(R.layout.row,null) val fImage = view1.findViewById<ImageView>(R.id.itemImageView) var fName = view1.findViewById<TextView>(R.id.tv_name) var fAge = view1.findViewById<TextView>(R.id.tv_age) fImage.setImageResource(image[p0]) fName.setText(name[p0]) fAge.setText(age[p0]) return view1 } // インデックスp0にあるデータを返却する override fun getItem(position: Int): Any { return image[position] } // 行を識別する為のユニーク値 override fun getItemId(position: Int): Long { return position.toLong() } // リスト表示するデータ件数 override fun getCount(): Int { return image.size } }
override fun getView(p0: Int, p1: View?, p2: ViewGroup?): View { // }
- onCreate()
Fragmentが生成された時に呼ばれる - onCreateView()
FragmentのUIが最初に描画された時に呼ばれる
Activity生成時にレイアウトであるactivity_match_listをセットします。
override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_match_list)
ListViewとR.idを取得してadaptorプロパティに用意したCustomAdaptor()メソッドでadaptorをセットします。
var listView = findViewById<ListView>(R.id.listview); val customAdaptor = CustomAdaptor(this) listView.adapter = customAdaptor listView.setOnItemClickListener{ parent, view, position, id -> Toast.makeText(this, "You Clicked:"+" "+customAdaptor.name[position],Toast.LENGTH_SHORT).show() }
レイアウトを指定してviewとする
val inflater = context.layoutInflater val view1 = inflater.inflate(R.layout.row,null)
レイアウトファイルR.idを取得する
val fImage = view1.findViewById<ImageView>(R.id.itemImageView) var fName = view1.findViewById<TextView>(R.id.tv_name) var fAge = view1.findViewById<TextView>(R.id.tv_age)
値をセットして返却する
fImage.setImageResource(image[p0]) fName.setText(name[p0]) fAge.setText(age[p0]) return view1
activity_match_list.xml
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MatchListActivity"> <ListView android:id="@+id/listview" android:layout_width="match_parent" android:layout_height="wrap_content"></ListView> </RelativeLayout>
row.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:layout_marginBottom="10dp" android:layout_marginLeft="10dp" android:orientation="horizontal"> <ImageView android:id="@+id/itemImageView" android:layout_width="70dp" android:layout_height="70dp" app:srcCompat="@drawable/girl1" /> <TextView android:id="@+id/tv_name" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="14sp"/> <TextView android:id="@+id/tv_age" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="14sp"/> </LinearLayout> </LinearLayout>
@see
- KotlinでData Bindingをする – ListView編
- KotlinのViewHolderパターンがとても気持ちいい
- Android Kotlin BaseAdapterでListViewを表示