Kotlin实现recyclerView列表
主要是熟悉Kotlin的语法,其中没什么比较难的点。
布局非常简单,不多说了,直接看下面的代码。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.lxrent.myapplication.MainActivity">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.v7.widget.RecyclerView
android:id="@+id/recyclerView"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout>
</LinearLayout>
下面介绍adapter的写法,主要区分一下和以前adapterd的区别。
package com.example.lxrent.myapplication
import android.content.Context
import android.support.v7.widget.RecyclerView
import android.util.Log
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.TextView
/**
*
* Created by ldf on 2017/10/9 下午5:44.
*
* God love people
*
* description:
*/
class MyAdapter(context: Context, list: ArrayList<String>) : RecyclerView.Adapter<MyAdapter.MyHolder>() {
var list: ArrayList<String>? = null
var inflater: LayoutInflater? = null
var context: Context? = null
init {
this.list = list
this.inflater = LayoutInflater.from(context)
this.context = context
}
override fun getItemCount(): Int {
return list?.size ?:0
}
override fun onBindViewHolder(holder: MyHolder?, position: Int) {
holder?.text?.text = list?.get(position)
Log.d("main", list?.get(position))
}
override fun onCreateViewHolder(parent: ViewGroup?, viewType: Int): MyHolder {
return MyHolder(inflater?.inflate(R.layout.item, parent, false), context!!)
}
class MyHolder(itemView: View?, context: Context) : RecyclerView.ViewHolder(itemView) {
// var text: TextView = itemView?.findViewById(R.id.tv) as TextView
var text = itemView?.findViewById<TextView>(R.id.tv)
}
}
上面主要有一个点需要注意,就是holder的写法,以前的写法主要是上面注释的那一句,但是升级了新的kotlin之后出现了问题,一直报错,网上查找资料显示是右侧无法推断出左侧,所以需要使用到泛型,感兴趣的同学可以好好研究研究。
下面使用就非常简单了,不多说直接上代码啦:
package com.example.lxrent.myapplication
import android.os.Bundle
import android.support.v7.app.AppCompatActivity
import android.support.v7.widget.LinearLayoutManager
import android.util.Log
import kotlinx.android.synthetic.main.activity_main.*
import java.util.*
class MainActivity : AppCompatActivity() {
var list = ArrayList<String>()
lateinit var myAdapter: MyAdapter
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
initData()
recyclerView.layoutManager = LinearLayoutManager(this)
recyclerView.addItemDecoration(MyDividerItemDecoration(
this, LinearLayoutManager.HORIZONTAL))
//初始化adapter
myAdapter = MyAdapter(this, list)
recyclerView.adapter = myAdapter
}
fun initData() {
//初始化数据
for (x in 0..15){
list.add("333"+x)
Log.d("main", list?.get(x))
}
}
}
上面一个知识点是,循环的写法,kotlin的写法比java简单很多了,看着还是很清爽的。