もくじ
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を表示






