【问题标题】:Android: Visible viewpager tab contains arraylist data of previous tabAndroid:可见的viewpager选项卡包含前一个选项卡的arraylist数据
【发布时间】:2016-04-08 14:10:03
【问题描述】:

我的应用中有一个带有两个选项卡(A 和 B)的视图寻呼机。第一个选项卡,即 A 有一个列表视图。单击列表中的任何项目都会打开一个带有另一个列表的新片段(我们称之为 C)。选项卡 B 也有一个列表视图。

标签B中的列表和片段C中包含的列表具有相同类型的项目。也就是说,两个列表的每个项目都属于同一类。我使用了带有自定义适配器的回收器视图来创建列表。由于选项卡 B 和片段 c 中的两个列表都属于相同的对象类型,因此我为此使用了相同的适配器,即 (CarListAdapter.class)。

我面临的问题是,当我打开片段 C 然后返回选项卡 A 然后向右滑动以使选项卡 B 可见时,单击选项卡 B 中的项目会导致空指针异常,原因是列表片段 CarListFragment.class 仍然有来自片段 C 而不是选项卡 B 的数据。(但是列表正确呈现,只是单击无法正常工作)

由于存在此适配器的两个实例,因此我希望它可以正常工作。但是,如果我使用两个具有完全相同代码的不同适配器,例如(CarListAdapterC.class 和 CarListAdapterB.class),则代码可以正常工作。

我被卡住了,谁能解释一下为什么会这样?

【问题讨论】:

    标签: android android-fragments android-viewpager


    【解决方案1】:

    我在使用 view pager 和 recycler view 时遇到了同样的问题。我已经搜索了分配,并且我知道这是 recycler view adapter 中的一个问题。

    您可能知道查看寻呼机默认情况下每次显示页面时都会再加载一个下一页。这是适配器显示问题的地方。您创建的同一适配器的不同实例指向到同一个地方。因为它还有其他页面项目。

    我知道这不是一个好主意,但我创建了另一个与第一个相同但名称不同的适配器,并将其用于下一个列表并且它有效。尝试分离列表的适配器。让我知道它是否有效。

    【讨论】:

    • 是的,你是对的,这正是我所说的,如果我创建另一个适配器,它确实可以工作。抱歉,我在问题中写了片段,如果我创建 CarListAdapterB 和 CarListAdapterC 它确实有效。我赞成你的回答。
    • 嘿,我发现了我的问题,看看我的回答,我想你一定有同样的问题。 :)
    【解决方案2】:

    我终于找到了解决方案,这对我来说真的很愚蠢。我在 RecyclerView 适配器中有 static 字段。删除它们就像一个魅力。

    【讨论】:

    • 我没有任何静态字段并且它不再工作。你能告诉我你使用哪个版本的支持库吗?你能提供你的适配器代码和你如何使用是吗?
    • 23.0.1,如果你愿意,你可以用你的代码创建一个问题!!肯定有什么问题,有需要我把代码贴出来。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-04
    相关资源
    最近更新 更多