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)
}