【问题标题】:Recyclerview is not getting updated in androidRecyclerview 没有在 android 中更新
【发布时间】:2021-01-21 11:43:30
【问题描述】:

我正在尝试通过为每个项目添加项目来创建回收器,我已经通过使用已经存在的列表进行创建并且它工作正常,但不是通过为每个项目添加项目。我就是这样做的。

片段:

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

基本上什么都不会发生。

【问题讨论】:

  • 希望答案能解决您的问题

标签: android kotlin android-recyclerview adapter


【解决方案1】:
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);
}

【讨论】:

  • @NathielPaulino 您面临什么问题?
  • 列表未显示!我调试并填充了dataM,但之后布局没有膨胀,好像缺少更新线程或其他东西,我不知道,它只有在我通过适配器构造函数传递现有列表时才有效,但添加当时有一项没有!
  • fun addItems(model: SubCategoryModel) 中的当前代码是什么?
  • dataM.add(model)
【解决方案2】:

你需要像这样声明变量并使用它

var adapter:SubCategoryAdapter()?=null

然后初始化它

layoutManager =  LinearLayoutManager(context)
recyclerView?.layoutManager = layoutManager
adapter = SubCategoryAdapter()
recyclerView?.adapter = adapter

【讨论】:

  • 适配器和setPositiveButton里面对吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多