【问题标题】:When I add an item into one recyclerview it gets two当我将一个项目添加到一个 recyclerview 中时,它会得到两个
【发布时间】:2020-12-04 11:27:19
【问题描述】:

我认为是参考问题。

RecyclerViews 似乎它们共享具有相同引用的项目。

我创建了两个recyclerview,我做了一个列表,我通过一个方法发送列表来创建另一个recyclerview。

例如,

val myAdapter = MyAdapter()
val myList = ArrayList<String>()

val yourAdapter = MyAdapter()
val yourList: ArrayList<String>? = null

private fun init(){
    initAction()
    list.add("lion")
    list.add("cat")
    list.add("dog")
    myAdapter.setList(list)
    rcvMy.adapter = myAdapter
    
    initOtherRecyclerView(list)
}

private fun initOtherRecyclerView(mList: ArrayList<String>){
    yourList = mList
    yourAdapter.setList(yourList)
    rcvYour.adapter = yourAdapter
}

private fun initAction(){
    btnAdd.setOnClickListener{
        myAdapter.items.add("Hello")
        myAdapter.notifyDataSetChanged()
    }
}

每当我单击btnAdd 时,它都会在rcvMy 中添加两个项目。

如何剪切引用?

【问题讨论】:

    标签: android copy pass-by-reference weak-references strong-references


    【解决方案1】:

    两个适配器都持有相同的 List 你可以使用两个单独的 Lists 。每当您需要列表中的数据时,您都可以查看Adapter。 下面是一个有问题的例子。

    private fun initOtherRecyclerView(mList: ArrayList<String>){
        yourList.addAll(mList);
        yourAdapter.setList(yourList)
        rcvYour.adapter = yourAdapter
    }
    

    【讨论】:

    • 但是字符串不是同一个引用吗?
    • 是的,但你没有修改字符串你正在修改列表。
    • 我也修改了列表。实际上,它不是字符串,而是对象。前任。学生班。
    猜你喜欢
    • 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
    相关资源
    最近更新 更多