滚动时Android RecyclerView重复项目

时间:2016-05-29 06:35:26

标签: android scroll android-recyclerview move

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

4 个答案:

答案 0 :(得分:24)

我知道它迟到但希望它会帮助某人。在适配器中覆盖这两种方法。

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

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

答案 1 :(得分:2)

RecyclerView将回收该视图。当您删除数据时,请调用notifyItemChanged(pos)notifyDataSetChanged()方法。

答案 2 :(得分:1)

我认为我来晚了,但是无论如何,我会建议一种对我有用的方法,也许有人对此仍然面临问题。
因此,我将我的recyclerview添加到nestedScrollView内,然后为我的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>

答案 3 :(得分:0)

这是你的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();
   }