【问题标题】:Android RecyclerView Duplicate Item When Scrolling滚动时Android RecyclerView重复项
【发布时间】:2016-09-27 04:19:56
【问题描述】:

RecyclerView 有问题。当我在 RV 中移动项目然后滚动时,看到一些项目已重复。

【问题讨论】:

标签: android scroll android-recyclerview move


【解决方案1】:

我想我来晚了,但无论如何我会建议一种对我有用的方法,也许有人仍然面临这个问题..
所以,我在一个nestedScrollView 中添加了我的recyclerview,然后为我的recyclerview 禁用了嵌套滚动。

使用此方法,nestedScrollView 会检测到滚动,并且 recyclerview 在滚动时停止复制项目。

这是我的 xml 代码:

<androidx.core.widget.NestedScrollView
     android:layout_width="match_parent"
     android:layout_height="match_parent">

     <androidx.recyclerview.widget.RecyclerView
          android:layout_width="match_parent"
          android:layout_height="wrap_content"
          android:nestedScrollingEnabled="false"/>

</androidx.core.widget.NestedScrollView>

【讨论】:

  • 你拯救了我的一天。谢谢你。此外,我没有添加“nestedScrollingEnabled=false”,但它仍然有效。
  • 很高兴听到@PinkRabbits,但请记住,这将停止 recyclerview 的主要功能,即回收物品。
  • 你拯救了我的一天......我花了大约 5-6 个小时来寻找这个问题,但在你的解决方案之前没有任何效果!!非常感谢....
  • 谢谢你,它就像一个魅力。
【解决方案2】:

我知道它已经晚了,但希望它会对某人有所帮助。在您的适配器中覆盖这两个方法。

@Override
public long getItemId(int position) {
    return position;
}

@Override
public int getItemViewType(int position) {
   return position;
}

【讨论】:

  • 给出一些解释:getItemViewType 的默认实现返回 0,假设适配器为单一视图类型。覆盖它可以让适配器知道有多种视图类型并相应地进行调整。
【解决方案3】:

问题出在你的notifyDataSetChanged()

检查您是否正确使用它。

即:

private void parseJsonFeed(JSONArray response) {

for (int i = 0; i < response.length(); i++)
        try {
            JSONObject obj = response.getJSONObject(i);
            MyData myData = new MyData();
            myData.setContent_title(obj.getString("content_title"));
            ...
            ...
            ...
            ...
            // adding content to array
            homeList.add(myData);
              } catch (JSONException e) {
            e.printStackTrace();
        }
    //Notifying the adapter that data has been added or changed
   //this must always be called else the recycler would not understand when to stop or start working.
    recyclerViewAdapter.notifyDataSetChanged();
   }

【讨论】:

    【解决方案4】:

    RecyclerView会回收视图。删除数据时,调用notifyItemChanged(pos)notifyDataSetChanged()方法。

    【讨论】:

      猜你喜欢
      • 2020-09-30
      • 2021-12-28
      • 1970-01-01
      • 1970-01-01
      • 2022-12-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-25
      相关资源
      最近更新 更多