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 -> {}
        }
    }
}