سلام دوستان
یه چیزی که برام خیلی عجیب بود این بود که شما موقعی که GridLayoutManager رو ست کردید متوجه اروری که موقع اضافه کردن یا دیلیت کردن آیتمی که توی ریسایکلر ویوتون هست نشدید!
من خیلی تحقیق کردم و متوجه شدم که باگی در ریسایکلر ویو وجود داره که باعث وجود اشکالاتی در index میشه و موقعی که شما چیزی رو دیلیت یا اد میکنین اپ کرش میکنه..
این باگ توی نسخه ی recyclerView:30.0.0 وجود داره و راه حلش به این شکل هست که:
۱- شما باید یه کلاسی ایجاد کنین و LayoutManager مربوطه رو extends کنین
۲- Constructorهای LayoutManager رو طبق کد زیر قرار بدید داخل این کلاس
۳- متد onLayoutChildren رو اورراید کنید و مانند کد زیر اون رو داخل try catch قرار بدید تا حداقل مشکل کرش نرم افزار فعلا حل بشه..
پ.ن: گویا این باگ فقط در GridLayoutManager وجود داره و همونطور که پروژه رو ما انجام دادیم مشکلی در LinearLayoutManager وجود نداشت..
public class NpaGridLayoutManager extends GridLayoutManager {
@Override
public void onLayoutChildren(RecyclerView.Recycler recycler, RecyclerView.State state) {
try{
super.onLayoutChildren(recycler, state);
}catch(IndexOutOfBoundsException e){
Log.e("LayoutManagerError", "onLayoutChildren: "+e);
}
}
public NpaGridLayoutManager(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
}
public NpaGridLayoutManager(Context context, int spanCount) {
super(context, spanCount);
}
public NpaGridLayoutManager(Context context, int spanCount, int orientation, boolean reverseLayout) {
super(context, spanCount, orientation, reverseLayout);
}
}