Android kotlin simple list
Create simple list in kotlin
For Java, please check my another post.
I separated base class and actual class to understand easily.
Base class and data class
Activity(DataListActivity.kt)
abstract class DataListActivity : AppCompatActivity() {
protected lateinit var listView : ListView
protected lateinit var adapter : DataTypeAdapter
abstract fun createDataSet()
abstract fun handleListItem(position : Int)
fun preparelistviewLayout() {
listView = findViewById<ListView>(R.id.listView) as ListView
createDataSet()
listView.onItemClickListener = AdapterView.OnItemClickListener { parent, view, position, id ->
handleListItem(position)
}
listView.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
override fun onItemSelected(parent: AdapterView<*>, view: View, pos: Int, id: Long) {
handleListItem(pos )
}
override fun onNothingSelected(parent: AdapterView<out Adapter>?) {
}
}
}
}
DataType.kt
This is Data
class DataType(title : String) {
var title : String = title
}
DataTypeAdapter.kt
class DataTypeAdapter : ArrayAdapter<DataType> {
constructor(context: Context?, data : ArrayList<DataType>) : super(context, R.layout.listview_row_item, data) {
}
override fun getView(position: Int, convertView: View?, parent: ViewGroup?): View {
val data : DataType = getItem(position)
var view : View = convertView ?: LayoutInflater.from(context).inflate(R.layout.listview_row_item, parent, false)
var titleView : TextView = view.findViewById<TextView>(R.id.titleView)
titleView.setText(data.title)
return view
}
}
DataTypeAdapter(Adapter)
class DataTypeAdapter : ArrayAdapter<DataType> {
constructor(context: Context?, data : ArrayList<DataType>) : super(context, R.layout.listview_row_item, data) {
}
override fun getView(position: Int, convertView: View?, parent: ViewGroup?): View {
val data : DataType = getItem(position)
var view : View = convertView ?: LayoutInflater.from(context).inflate(R.layout.listview_row_item, parent, false)
var titleView : TextView = view.findViewById<TextView>(R.id.titleView)
titleView.setText(data.title)
return view
}
}
list_row_item.xml (ListView Layout)
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/titleView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="35dp" />
</LinearLayout>
UI
activity_app_data.xml
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout 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="reward.rakuten.co.jp.privatematter.activity.AppsDataActivity">
<ListView
android:id="@+id/listView"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</android.support.constraint.ConstraintLayout>
AppDataActivity.kt
class AppsDataActivity : DataListActivity() {
val DIALOG_ID : String = "AppDataDialog"
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_apps_data)
preparelistviewLayout()
}
override fun createDataSet() {
val datalist : ArrayList<DataType> = ArrayList<DataType>()
datalist.add(DataType("Menu1"))
datalist.add(DataType("Menu2")))
adapter = DataTypeAdapter(this, datalist)
listView.adapter = null
listView.adapter = adapter
}
override fun handleListItem(position : Int) {
when(position) {
0 -> {}
1 -> {}
else -> {}
}
}
}
