Skip to main content

RecyclerView in Kotlin

I just want to share my little bit knowledge and code of RecyclerView using Kotlin.

Main class and Adapter

I am assuming that you have aware about the some syntax of Kotlin and how to use, just add RecyclerView in activity_main.xml file and set with adapter class.

class MainActivity : AppCompatActivity(){

lateinit var mRecyclerView : RecyclerView
val mAdapter : RecyclerAdapter = RecyclerAdapter()

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val toolbar = findViewById(R.id.toolbar) as Toolbar
setSupportActionBar(toolbar)

mRecyclerView = findViewById(R.id.recycler_view) as RecyclerView

mRecyclerView.setHasFixedSize(true)
mRecyclerView.layoutManager = LinearLayoutManager(this)
mAdapter.RecyclerAdapter(getList(), this)
mRecyclerView.adapter = mAdapter
}

private fun getList(): ArrayList<String> {
var list : ArrayList<String> = ArrayList()
for (i in 1..10) { // equivalent of 1 <= i && i <= 10
println(i)
list.add("$i")
}
return list
}
}

this one is your recycler view adapter class and create main_item.xml file what you want

class RecyclerAdapter : RecyclerView.Adapter<RecyclerAdapter.ViewHolder>() {

var mItems: ArrayList<String> = ArrayList()
lateinit var mClick : OnClick

fun RecyclerAdapter(item : ArrayList<String>, mClick : OnClick){
this.mItems = item
this.mClick = mClick;
}

override fun onBindViewHolder(holder: ViewHolder, position: Int) {
val item = mItems[position]
holder.bind(item, mClick, position)
}

override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
val layoutInflater = LayoutInflater.from(parent.context)
return ViewHolder(layoutInflater.inflate(R.layout.main_item, parent, false))
}

override fun getItemCount(): Int {
return mItems.size
}

class ViewHolder(view: View) : RecyclerView.ViewHolder(view) {
val card = view.findViewById(R.id.card) as TextView
fun bind(str: String, mClick: OnClick, position: Int){
card.text = str
card.setOnClickListener { view ->
mClick.onClickListner(position)
}
}
}
}