Я столкнулся с неприятной ошибкой при использовании Viewpager в Recycler View. Ниже ошибки я столкнулся в особой ситуации. Я начал фрагмент, который имел RecyclerView с Viewpager (используя FragmentStatePagerAdapter). Это работало хорошо до тех пор, пока я не переключился на другой фрагмент по щелчку ячейки в RecyclerView, а затем вернулся назад, используя аппаратную кнопку «Назад» телефона, и приложение упало.
И что забавно, так это то, что у меня было два ViewPager в одном RecyclerView, и оба были на расстоянии около 5 ячеек (другие не были видны на экране, они были отключены). Поэтому изначально я просто применил Решение к первому Viewpager и оставил другой как есть (Viewpager используя фрагменты).
Навигация назад работала нормально, когда был виден первый пейджер. Теперь, когда я прокрутил вниз до второго, а затем изменил фрагмент и вернулся, он потерпел крах (То же самое произошло с первым). Поэтому мне пришлось поменять оба виджета.
В любом случае, читайте ниже, чтобы найти рабочее решение. Ошибка сбоя ниже:
java.lang.IllegalArgumentException: No view found for id 0x7f0c0098 (com.kk:id/pagerDetailAndTips) for fragment ProductDetailsAndTipsFragment{189bcbce #0 id=0x7f0c0098}
Потратил часы на его отладку. Прочитайте этот полный пост темы до конца, применяя все решения, включая проверку того, что я передаю childFragmentManager.
Ничего не получалось.
Наконец, вместо использования FragmentStatePagerAdapter я расширил PagerAdapter и использовал его в Viewpager без использования фрагментов. Я считаю, что некоторые, где есть ошибка с вложенными фрагментами. Во всяком случае, у нас есть варианты. Читать ...
Ниже ссылка была очень полезна:
Просмотр без фрагментов
Ссылка может умереть, поэтому я размещаю свое внедренное решение здесь:
public class ScreenSlidePagerAdapter extends PagerAdapter {
private static final String TAG = "ScreenSlidePager";
ProductDetails productDetails;
ImageView imgProductImage;
ArrayList<Imagelist> imagelists;
Context mContext;
// Constructor
public ScreenSlidePagerAdapter(Context mContext,ProductDetails productDetails) {
//super(fm);
this.mContext = mContext;
this.productDetails = productDetails;
}
// Here is where you inflate your View and instantiate each View and set their values
@Override
public Object instantiateItem(ViewGroup container, int position) {
LayoutInflater inflater = LayoutInflater.from(mContext);
ViewGroup layout = (ViewGroup) inflater.inflate(R.layout.product_image_slide_cell,container,false);
imgProductImage = (ImageView) layout.findViewById(R.id.imgSlidingProductImage);
String url = null;
if (imagelists != null) {
url = imagelists.get(position).getImage();
}
// This is UniversalImageLoader Image downloader method to download and set Image onto Imageview
ImageLoader.getInstance().displayImage(url, imgProductImage, Kk.options);
// Finally add view to Viewgroup. Same as where we return our fragment in FragmentStatePagerAdapter
container.addView(layout);
return layout;
}
// Write as it is. I don't know much about it
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView((View) object);
/*super.destroyItem(container, position, object);*/
}
// Get the count
@Override
public int getCount() {
int size = 0;
if (productDetails != null) {
imagelists = productDetails.getImagelist();
if (imagelists != null) {
size = imagelists.size();
}
}
Log.d(TAG,"Adapter Size = "+size);
return size;
}
// Write as it is. I don't know much about it
@Override
public boolean isViewFromObject(View view, Object object) {
return view == object;
}
}
Надеюсь, это было полезно!