kotlinでListViewのカスタムlayout

SimpleAdapterの第5引数はintArrayOfじゃないと怒られる。

var data = arrayListOf(
    hashMapOf<String,String>("title" to "AAA", "tag" to "a", "desc" to "111"),
    hashMapOf<String,String>("title" to "BBB", "tag" to "b", "desc" to "222"),
    hashMapOf<String,String>("title" to "CCC", "tag" to "c", "desc" to "333")
)
val adapter = SimpleAdapter(
    this, data, R.layout.list_item,
     arrayOf("title", "tag", "desc"), intArrayOf(R.id.title, R.id.tag, R.id.desc)
)
val listView = findViewById<ListView>(R.id.list)
listView.adapter = adapter

kotlinでsetOnScrollListener

サンプルはListViewの末尾のRowAtが10の時にLog.dを吐く

p1は表示中の先頭のRowAt(他Viewに潜っている時も表示中とみなす), p2は表示中のRowCount, p3はListViewに渡されたArrayAdapterのArrayCount

よって、末尾のRowAtを求めるには p1+p2になる。

list.setOnScrollListener(
    object: AbsListView.OnScrollListener{
        override fun onScroll(p0: AbsListView?, p1: Int, p2: Int, p3: Int) {
            val lastIndex = p1+p2
            if(  lastIndex == 10 ){
                Log.d( "tag", "scroll" )
            }
        }
        override fun onScrollStateChanged(p0: AbsListView?, p1: Int) {
        }
    }
)

kotlinでMultiChoiceModeListener

ListViewのandroid:choiceMode="multipleChoiceModal" のやつ

list.setMultiChoiceModeListener(
    object: AbsListView.MultiChoiceModeListener{
         override fun onCreateActionMode(p0: ActionMode?, p1: Menu?): Boolean {
             return true
         }

         override fun onPrepareActionMode(p0: ActionMode?, p1: Menu?): Boolean {
             return true
         }

         override fun onItemCheckedStateChanged(p0: ActionMode?, p1: Int, p2: Long, p3: Boolean) {
         }

         override fun onActionItemClicked(p0: ActionMode?, p1: MenuItem?): Boolean {
             return true
         }

         override fun onDestroyActionMode(p0: ActionMode?) {
             var i=0
             while(i < list.childCount){
                 Toast.makeText( this@MainActivity, (list.getChildAt(i) as TextView).text, Toast.LENGTH_SHORT ).show()
                 i++
             }
         }
     }
 )

kotlinで動的ListView生成 & クリックイベント

すっきり記述できる(^_^)

val data:ArrayList<String> = ArrayList()
data.add("1")
data.add("2")
data.add("3")
val listView: ListView = findViewById(R.id.list)
list.adapter = ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, data)

list.setOnItemClickListener { adapterView, view, i, l ->
    Toast.makeText(this@MainActivity, (view as TextView).text.toString(), Toast.LENGTH_SHORT ).show()
}

kotlinでspinner動的生成

fun createSpinner(){
    var list = ArrayList<String>()
    list.add("1")
    list.add("2")
    list.add("3")

    val adapter = ArrayAdapter<String>(this, android.R.layout.simple_spinner_dropdown_item, list)
    val spinner = findViewById<Spinner>(R.id.spinner)
    spinner.adapter = adapter
}
createSpinner()

kotlinでspinner

setOnItemSelectedListenerではないので注意

val spinner = findViewById<Spinner>(R.id.spinner)
spinner.onItemSelectedListener =
    object: AdapterView.OnItemSelectedListener {
        override fun onItemSelected(p0: AdapterView<*>?, p1: View?, p2: Int, p3: Long) {
            val i = p0 as Spinner
            Toast.makeText(this@MainActivity, i.selectedItem.toString(), Toast.LENGTH_SHORT).show()
        }
        override fun onNothingSelected(p0: AdapterView<*>?) {
        }
    }