当前位置: 代码迷 >> 综合 >> 第七章:kotlin:recycleView
  详细解决方案

第七章:kotlin:recycleView

热度:39   发布时间:2023-12-22 16:50:01.0

kotlin学习笔记

kotlin中XML代码段是不变的

  <androidx.recyclerview.widget.RecyclerViewandroid: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? = nullfun 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? = nullprivate var listBean: ArrayList<ShopListBean.DataBean.RecordsBean>? = nullconstructor(context: Context, shopListBean: ArrayList<ShopListBean.DataBean.RecordsBean>) {this.mContext = contextthis.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: ImageViewvar shopPrice: TextViewvar shopName: TextViewconstructor(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 = falserv_list.adapter = mShopAdaptermShopAdapter!!.OnItemClick = { _, position ->shopOnClisk(position)}