个人淘宝店铺链接 有需要的伙伴点击这里
1 Kotlin中使用ListView
Kotlin中使用ListView,和Java中使用ListView基本一致,适配器代码
class MainViewAdapter(context:Context,data:List<String>) : BaseAdapter() {
private var context:Context
private var data:List<String>
//初始化操作
init {
this.context = context
this.data = data
}
override fun getCount(): Int {
return data.size
}
override fun getItem(position: Int): Any {
return data.get(position)
}
override fun getItemId(position: Int): Long {
return position.toLong()
}
override fun getView(position: Int, convertView: View?, parent: ViewGroup?): View {
var holder:ViewHolder
var view:View
if(convertView == null){
view = View.inflate(context,R.layout.main_listview_item_layout,null)
holder = ViewHolder()
holder.tv_title = view.findViewById(R.id.tv_title)
holder.tv_info = view.findViewById(R.id.tv_info)
view.tag = holder
}else{
view = convertView
holder = view.tag as ViewHolder
}
holder.tv_title.text = data.get(position)
holder.tv_info.text = data.get(position)
return view
}
inner class ViewHolder{
lateinit var tv_title:TextView
lateinit var tv_info:TextView
}
}
对于ListView的缓存优化,Java中使用静态内部类,在Kotlin中使用inner class类即可
var dataList = mutableListOf<String>()
dataList.add("标题1")
dataList.add("标题2")
dataList.add("标题3")
dataList.add("标题4")
adapter = activity?.let { MainViewAdapter(it.baseContext,dataList) }!!
//设置适配器
lv_main.adapter = adapter
在设置ListView的数据后,lv_main.adapter就相当于ListView.setAdapter(adapter)
2 Kotlin中使用RecyclerView
其实,ListView做的优化,RecyclerView内部已经封装好了,Kotlin的代码
class MineRecViewAdapter(context: Context,data:List<String>) :
RecyclerView.Adapter<MineRecViewAdapter.MineViewHolder>() {
private var context:Context
private var data:List<String>
init {
this.context = context
this.data = data
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MineViewHolder {
//初始化View
var view = View.inflate(context, R.layout.main_listview_item_layout, null)
return MineViewHolder(view)
}
// override fun getItemViewType(position: Int): Int {
// return super.getItemViewType(position)
// }
override fun onBindViewHolder(holder: MineViewHolder, position: Int) {
holder.tv_title.text = data.get(position)
holder.tv_info.text = data.get(position)
}
override fun getItemCount(): Int {
return data.size
}
inner class MineViewHolder(itemView : View) : RecyclerView.ViewHolder(itemView) {
var tv_title = itemView.findViewById<TextView>(R.id.tv_title)
var tv_info = itemView.findViewById<TextView>(R.id.tv_info)
}
}
使用方式,比ListView多的就是需要设置布局管理器LinearLayoutManager
var dataList = mutableListOf<String>()
dataList.add("标题1")
dataList.add("标题2")
dataList.add("标题3")
dataList.add("标题4")
adapter = activity?.let { MineRecViewAdapter(it.baseContext,dataList) } !!
var layoutManager = activity?.let { LinearLayoutManager(it.baseContext,LinearLayoutManager.VERTICAL,false) }
//数据加载
rv_mine.layoutManager = layoutManager
rv_mine.adapter = adapter