web-dev-qa-db-ja.com

Android RecyclerViewスクロール時の重複アイテム

RecyclerViewに問題があります。 RVでアイテムを移動してからスクロールすると、一部のアイテムが重複しているのがわかりました。

8
RayaCoder

RecyclerViewはビューをリサイクルします。データを削除するときは、notifyItemChanged(pos)またはnotifyDataSetChanged()メソッドを呼び出します。

1
moonChen

私はそれが遅いことを知っていますが、それが誰かを助けることを願っています。アダプターでこれら2つのメソッドをオーバーライドします。

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

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

私はここに遅れていると思いますが、とにかく私は私のためにうまくいった方法を提案します、多分誰かがまだこれで問題に直面しています。
そこで、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>
0
Hussein ND

問題になるのはあなたの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();
   }
0
The Dead Guy