Kotlin开发Android App和Java的差异2----Kotlin中使用ListView和RecyclerView

个人淘宝店铺链接 有需要的伙伴点击这里

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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Awesome_lay

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值