如何解决Recyclerview 未在 android 中更新
我正在尝试通过为每个项目添加项目来创建一个回收器,我已经通过使用已经存在的列表创建并且工作正常,但不是通过为每个项目添加项目。这就是我的做法。
片段:
layoutManager = linearlayoutmanager(context);
recyclerView?.layoutManager = layoutManager;
recyclerView?.adapter = SubCategoryAdapter();
builder.setView(dialogLayout)
builder.setPositiveButton("Salvar") { _,_ ->
var model: SubCategoryModel = SubCategoryModel(alertTitleEdit.text.toString(),alertDescriptionEdit.text.toString(),null);
adapter.run{
addItems(model)
notifyDataSetChanged()
}
}
builder.show()
适配器
class SubCategoryAdapter() : RecyclerView.Adapter<SubCategoryAdapter.SubCategoryHolder>() {
private var dataM: List<SubCategoryModel> = mutablelistof();
override fun onCreateViewHolder(parent: ViewGroup,viewType: Int): SubCategoryHolder {
val view = LayoutInflater.from(parent.context).inflate(R.layout.card_sub_category,parent,false)
return SubCategoryHolder(view);
}
override fun getItemCount(): Int {
return dataM.count();
}
fun addItems(model: SubCategoryModel){
dataM.toMutableList().add(model);
}
override fun onBindViewHolder(holder: SubCategoryHolder,position: Int) {
var res = dataM[position];
holder.title.text = res.Title;
holder.description.text = res.Description
}
class SubCategoryHolder (val view: View) : RecyclerView.ViewHolder(view) {
lateinit var title: TextView;
lateinit var description: TextView;
lateinit var price: TextView;
var v: View = view;
init {
title = v.findViewById(R.id.textViewName);
description = v.findViewById(R.id.description);
price = v.findViewById(R.id.price);
}
}
}
基本上什么都没发生。
解决方法
private var dataM: List<SubCategoryModel> = mutableListOf();
问题在于类型 List
它不可变。
在这里dataM.toMutableList().add(model);
是toMutableList()
。
该方法执行此操作
public fun <T> Collection<T>.toMutableList(): MutableList<T> {
return ArrayList(this)
}
它返回一个全新的实例,而不是您的适配器中的实例。
你可以这样做
private var dataM: ArrayList<SubCategoryModel> = ArrayList();
和添加项目
fun addItems(model: SubCategoryModel){
dataM.add(model);
notifyItemInserted(dataM.count()-1);
}
,
你需要像这样声明变量并使用它
var adapter:SubCategoryAdapter()?=null
然后初始化它
layoutManager = LinearLayoutManager(context)
recyclerView?.layoutManager = layoutManager
adapter = SubCategoryAdapter()
recyclerView?.adapter = adapter
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。