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