微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Recyclerview 未在 android 中更新

如何解决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 举报,一经查实,本站将立刻删除。