Android RecyclerView – Kotlin
RecyclerView
RecyclerView is similar with ListView.
(But not equal)
This is in support v7.
RecyclerView seems to have low level compare to ListView.
Preparation
Add support library to build.gradle
implementation 'com.android.support:recyclerview-v7:26.1.0'
This is an example, please be careful version number, I use 26 compileSdkVersion.
Component(class)
To use this, we need to prepare some classes to build it
Name | What? |
---|---|
RecyclerView | View widget, it’s same as ListView |
RecyclerView.Adapter | Data adapter, it is same as Adapter |
RecyclerView.ViewHolder | 1 line view layout referrence |
RecyclerView.LayoutManager |
ItemData.kt
This is data
class ItemData(title : String) { var title : String init { this.title = title } }
ItemDataViewHolder.kt
class ItemDataViewHolder(parent : ViewGroup) : RecyclerView.ViewHolder( LayoutInflater.from(parent.context).inflate(R.layout.list_row_item, parent, false)) { val titleView : TextView = itemView.findViewById(R.id.titleView) }
list_row_item.xml
XML layout for ItemDataViewHolder,… 1 line layout
ItemDataRecycleViewAdapter.kt
class ItemDataRecycleViewAdapter(list: List<ItemData>) : RecyclerView.Adapter<ItemDataViewHolder>() { private val list : List<ItemData> init { this.list = list } override fun onCreateViewHolder(parent: ViewGroup?, viewType: Int): ItemDataViewHolder { var holder : ItemDataViewHolder = ItemDataViewHolder(parent!!) return holder } override fun onBindViewHolder(holder: ItemDataViewHolder?, position: Int) { holder?.titleView?.text = list.get(position).title } override fun getItemCount(): Int { return list.size } }
MainActivity.kt
class MainActivity : AppCompatActivity() { private var adapter : ItemDataRecycleViewAdapter? = null override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) var rv : RecyclerView = findViewById(R.id.recyclerview) adapter = ItemDataRecycleViewAdapter(getItems()) var llm = LinearLayoutManager(this) rv.adapter = adapter rv.layoutManager = llm rv.setOnClickListener(ItemClickListener()) // No item click listener? } private fun getItems() : List<ItemData> { var list : MutableList<ItemData> = mutableListOf() list.add(ItemData("Ash")) list.add(ItemData("Miona")) list.add(ItemData("Maiyan")) list.add(ItemData("Naachan")) list.add(ItemData("Manatsu")) list.add(ItemData("Ikuchan")) list.add(ItemData("Ikomachan")) return list } inner class ItemClickListener : View.OnClickListener { override fun onClick(p0: View?) { } } }
activity_main.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="com.atmarkplant.recyclerviewsample.MainActivity"> <android.support.v7.widget.RecyclerView android:id="@+id/recyclerview" android:layout_width="match_parent" android:layout_height="match_parent"> </android.support.v7.widget.RecyclerView> </android.support.constraint.ConstraintLayout>