Kotlin

Kotlin inflate ListView

 

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

 

Amazonおすすめ

iPad 9世代 2021年最新作

iPad 9世代出たから買い替え。安いぞ!🐱 初めてならiPad。Kindleを外で見るならiPad mini。ほとんどの人には通常のiPadをおすすめします><

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)