android - 在 Android 中使用 Kotlin 在 RecyclerViewAdapter 中实现自定义接口
问题描述
我在我的应用程序中实现了 RecyclerView。由于性能差异,我想使用 notifyItemRemoved 和 notifyItemChanged 而不是 setDataChange 远程更改、添加和删除项目。我想制作一些接口对象,但我不知道如何或在哪里实现和覆盖接口方法等。
这是我在 MainActivity.kt 中的 RecyclerView 实现
val linearLayoutManager = LinearLayoutManager(this)
recyclerView.layoutManager = linearLayoutManager
adapter = RecyclerAdapter(itemList)
recyclerView.adapter = adapter
这是我的界面:
public interface AddItemListener {
void addItem(int position);
}
这是我的 RecyclerView 类及其 ViewHolder:
class RecyclerAdapter(val items: ArrayList<RecyclerViewListModel>) :
RecyclerView.Adapter<RecyclerAdapter.MyViewHolder>() {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) =
MyViewHolder(LayoutInflater.from(parent.context).inflate(R.layout.item_recycler_view, parent, false))
override fun getItemCount(): Int = items.size
override fun onBindViewHolder(holder: MyViewHolder, position: Int) {
holder.onBind()
}
inner class MyViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
fun onBind(){}
}
}
我在 MainActivity 中有浮动按钮。我想访问 Viewholder 以添加元素。提前致谢 !
解决方案
像这样向您的适配器添加一个侦听器:
class RecyclerAdapter(val items: ArrayList<RecyclerViewListModel>, internal var listener: AddItemListener) :
RecyclerView.Adapter<RecyclerAdapter.MyViewHolder>() {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) =
MyViewHolder(LayoutInflater.from(parent.context).inflate(R.layout.item_recycler_view, parent, false))
override fun getItemCount(): Int = items.size
override fun onBindViewHolder(holder: MyViewHolder, position: Int) {
holder.onBind()
}
fun addNewItem(item : RecyclerViewListModel){
items.add(item)
notifyItemInserted(items.size - 1)
}
fun removeItem(position : Int){
items.removeAt(position)
notifyItemRemoved(position)
}
inner class MyViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView),
View.OnClickListener {
override fun onClick(v: View?) {
listener. addItem(adapterPosition)
}
init {
itemView.setOnClickListener(this)
}
fun onBind(){}
}
}
在您的活动/片段中添加点击监听器:
adapter = RecyclerAdapter(itemList, this)
实现 AddItemListener 的乐趣:
override fun addItem(int position){
// you can get item click position
// you can show the dialog as like "Do you want to delete?"
adapter.romoveItem(position)
}
添加新项目:
val fab: FloatingActionButton = findViewById(R.id.fab)
fab.setOnClickListener { view ->
adapter.addNewItem(RecyclerViewListModel(verb1, verb2....))
}
推荐阅读
- google-app-maker - 预览失败,但部署有效
- javascript - 使用扩展运算符和组合参数
- mnist - MNIST 对象没有属性数据
- distributed - 在分布式环境中模拟多个策略决策点 (PDP)
- android - 无法使用 scanBleDevices 进行扫描
- tensorflow - 高级 API 中的 Tesorflow 自定义层:抛出对象没有属性“_expects_mask_arg”错误
- javascript - [Vue 警告]:渲染错误:“TypeError:将循环结构转换为 JSON
- gcc - 为什么 ldconfig 不链接或缓存我的库?
- c# - 是否可以验证数字签名并创建新文档,以便 Adobe 阅读器或福昕阅读器在启动时不应该验证相同
- android - 有什么方法可以从 ref 获取数据作为 java 中的列表