Під час використання Viewpager у режимі перегляду Recycler я зіткнувся з помилкою Nasty. Нижче помилки я зіткнувся в особливій ситуації. Я запустив фрагмент, який мав RecyclerView з Viewpager (використовуючи FragmentStatePagerAdapter). Він працював добре, поки я не переключився на інший фрагмент при натисканні стільника в RecyclerView, а потім повернувся назад за допомогою апаратної кнопки "Назад", і додаток вийшов з ладу.
І що смішного в цьому було те, що у мене було два Viewpager у тому ж RecyclerView, і обидва були приблизно в 5 клітинках (інших не було видно на екрані, це було вниз). Тож спочатку я просто застосував Рішення до першого Viewpager, а інший залишив таким, яким він є (Viewpager, використовуючи фрагменти).
Навігація назад спрацювала чудово, коли перший пейджер огляду був видно. Тепер, коли я прокрутився до другого, а потім змінив фрагмент і повернувся, він розбився (те ж саме сталося і з першим). Тому мені довелося змінити обох Viewpagers.
У будь-якому випадку читайте нижче, щоб знайти робоче рішення. Помилка аварії нижче:
java.lang.IllegalArgumentException: No view found for id 0x7f0c0098 (com.kk:id/pagerDetailAndTips) for fragment ProductDetailsAndTipsFragment{189bcbce #0 id=0x7f0c0098}
Провів налагодження. Прочитайте цю повну тему донизу, застосувавши всі рішення, включаючи переконання, що я проходжу childFragmentManager.
Нічого не працювало.
Нарешті, замість того, щоб використовувати FragmentStatePagerAdapter, я розширив PagerAdapter і використав його в Viewpager, не використовуючи фрагментів. Я вірю деяким, де є БУГ з вкладеними фрагментами. У всякому разі, у нас є варіанти. Читати ...
Нижче посилання було дуже корисно:
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;
}
}
Сподіваюся, це було корисно !!