IndexOutOfBoundsException: обнаружено несоответствие. Неверная позиция товара - RecylerView
У меня есть два вида рециркуляции, пусть будут RecylerA и RecylerB
Пока RecyclerB находится на последней позиции, я загружаю оставшиеся данные и уведомляю адаптер RecyclerB. Он прекрасно работает для меня. Но при загрузке RecyclerB я пытаюсь щелкнуть RecyclerA, RecylerA фактически очищает адаптер RecylerB и загружает новые данные через API. Практически все время для меня это нормально работает. Но когда-нибудь я перехожу к следующей проблеме:
java.lang.IndexOutOfBoundsException: Inconsistency detected. Invalid item position 24(offset:24).state:36 android.support.v7.widget.RecyclerView{620771f VFED..... ...
at android.support.v7.widget.RecyclerView$Recycler.a(Unknown Source:389)
at android.support.v7.widget.GapWorker.prefetchPositionWithDeadline(Unknown Source:14)
at android.support.v7.widget.GapWorker.flushTaskWithDeadline(Unknown Source:15)
at android.support.v7.widget.GapWorker.flushTasksWithDeadline(Unknown Source:22)
at android.support.v7.widget.GapWorker.a(Unknown Source:3)
at android.support.v7.widget.GapWorker.run(Unknown Source:71)
at android.os.Handler.handleCallback(Handler.java:790)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6626)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:811)
Я пробую почти все решения, которые я вижу в StackOverflow, как
mRecyclerViewproduct.getRecycledViewPool().clear();
mRecyclerViewproduct.setItemAnimator(null);
перед уведомлением адаптера. Также добавлена дополнительная задержка при уведомлении адаптера. Обновите уведомляющий адаптер, используя позицию и т. Д. Но у меня нет решения. Есть ли какая-нибудь новая идея или решение для этого?
Обновление:
Адаптер для RecyclerA следующим образом (viewHolder)
if (selectedPosition == position) {
holder.list_rv_productchip.setTextColor(Color.WHITE);
holder.itemView.setBackground(context.getResources().getDrawable(R.drawable.chipselected));
} else {
holder.list_rv_productchip.setTextColor(Color.BLACK);
holder.itemView.setBackground(context.getResources().getDrawable(R.drawable.quantityblack));
}
holder.itemView.setOnClickListener(view -> {
selectedPosition = position;
notifyDataSetChanged();
((CategorywiseProductlistActivity) context).loadingpageflag = true;
((CategorywiseProductlistActivity) context).filterdata = "{\"filter\":{ } }";
constantsVariables.category_wise_product_paging=1;
((CategorywiseProductlistActivity) context).makeCategorycurrentidtochip(subCategories.get(position).getId());
if (subCategories.get(position).getName().matches("All Items")) {
((CategorywiseProductlistActivity) context).titleallproducts.setText("All in " + ((CategorywiseProductlistActivity) context).headtitle);
} else {
((CategorywiseProductlistActivity) context).titleallproducts.setText("All in " + subCategories.get(position).getName());
}
((CategorywiseProductlistActivity) context).Categorycurrentid = "" + subCategories.get(position).getId();
((CategorywiseProductlistActivity) context).displayproducts(subCategories.get(position).getId(), "{\"filter\":{ } }");
});