RecyclerView
に問題があります。 RVでアイテムを移動してからスクロールすると、一部のアイテムが重複しているのがわかりました。
RecyclerView
はビューをリサイクルします。データを削除するときは、notifyItemChanged(pos)
またはnotifyDataSetChanged()
メソッドを呼び出します。
私はそれが遅いことを知っていますが、それが誰かを助けることを願っています。アダプターでこれら2つのメソッドをオーバーライドします。
@Override
public long getItemId(int position) {
return position;
}
@Override
public int getItemViewType(int position) {
return position;
}
私はここに遅れていると思いますが、とにかく私は私のためにうまくいった方法を提案します、多分誰かがまだこれで問題に直面しています。
そこで、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>
問題になるのはあなたの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();
}