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でRatingBar
SAM変換でサクっと書ける
val bar = findViewById<RatingBar>(R.id.rating)
bar.setOnRatingBarChangeListener { ratingBar, fl, b ->
Toast.makeText(this, fl.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<*>?) {
}
}