第七章:kotlin:recycleView

14 篇文章 1 订阅
1 篇文章 0 订阅

kotlin学习笔记

kotlin中XML代码段是不变的

  <androidx.recyclerview.widget.RecyclerView
                android:id="@+id/rv_list"
                android:layout_width="match_parent"
                android:layout_height="match_parent" />

最主要的是adapter的编写:

还是一样,继承RecycleView.Adapter

然后constructor实例化,传入参数

onCreateViewHolder、onBindViewHolder还是一样

还有点击事件的编写

先声明接口:

   interface OnItemClick {
        fun onItemClick(view: View?, position: Int)
    }

    private var mOnItemClick //声明接口
            : OnItemClick? = null

    fun setOnClick(onItemClickListener: OnItemClick?) {
        mOnItemClick = onItemClickListener
    }

然后 onBind里写点击事件:

  holder.itemView.setOnClickListener (View.OnClickListener { v: View? ->
            mOnItemClick?.onItemClick(v, position)
        })

 kotlin的声明接口可以用函数型变量来简化回调,也可以这么写

  var mOnItemClick: (View, Int) -> Unit = { _, _ -> }


  override fun onBindViewHolder(holder: ViewHolder, position: Int) {
   ...

        holder.itemView.setOnClickListener {
//            mOnItemClick?.onItemClick(it, position)
            MyOnClick(it, position)
        }
    }
 

 

全部代码:

class MainShopAdapter : RecyclerView.Adapter<MainShopAdapter.ViewHolder> {
    private var mContext: Context? = null
    private var listBean: ArrayList<ShopListBean.DataBean.RecordsBean>? = null

    constructor(context: Context, shopListBean: ArrayList<ShopListBean.DataBean.RecordsBean>) {
        this.mContext = context
        this.listBean = shopListBean
    }

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

    override fun getItemCount(): Int {
        return listBean?.size as Int
    }

    override fun onBindViewHolder(holder: ViewHolder, position: Int) {
        val bean = listBean?.get(position)
        holder.shopPrice.text = ("¥" + bean?.goodsPrice.toString())
        holder.shopName.text = bean?.goodsName.toString()

        ImageLoader.getInstance()
            .displayImage(UrlUtils.BASE_IMAGE + bean?.goodsPic, holder.shopImg)

        holder.itemView.setOnClickListener {
            OnItemClick(it, position)
        }
    }

    var OnItemClick: (View, Int) -> Unit = { _, _ -> }


    class ViewHolder : RecyclerView.ViewHolder {
        var shopImg: ImageView
        var shopPrice: TextView
        var shopName: TextView

        constructor(itemView: View) : super(itemView) {
            shopImg = itemView.findViewById(R.id.iv_shop_img)
            shopPrice = itemView.findViewById(R.id.tv_shop_price)
            shopName = itemView.findViewById(R.id.tv_shop_name)
        }
    }
}

调用方法:

        mRecordsBeans = ArrayList()
        mShopAdapter =
            MainShopAdapter(
                mContext,
                mRecordsBeans!!
            )

        rv_list.layoutManager =
            GridLayoutManager(
                mContext,
                3,
                LinearLayoutManager.VERTICAL,
                false
            )

        rv_list.setHasFixedSize(true)
        rv_list.isNestedScrollingEnabled = false
        rv_list.adapter = mShopAdapter
        
        mShopAdapter!!.OnItemClick = { _, position ->
            shopOnClisk(position)
        }

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值