Saya menghadapi kesalahan Nasty ketika menggunakan Viewpager di dalam Recycler View. Kesalahan di bawah ini saya hadapi dalam situasi khusus. Saya memulai sebuah fragmen yang memiliki RecyclerView dengan Viewpager (menggunakan FragmentStatePagerAdapter). Ini bekerja dengan baik sampai saya beralih ke fragmen yang berbeda pada klik Sel di RecyclerView, dan kemudian menavigasi kembali menggunakan tombol Kembali perangkat keras Ponsel dan App crash.
Dan yang lucu tentang ini adalah bahwa saya memiliki dua Viewpagers dalam RecyclerView yang sama dan keduanya berjarak sekitar 5 sel (yang lain tidak terlihat di layar, itu turun). Jadi awalnya saya hanya menerapkan Solusi ke Viewpager pertama dan meninggalkan yang lain apa adanya (Viewpager menggunakan Fragmen).
Menavigasi kembali berfungsi dengan baik, ketika pager tampilan pertama dapat dilihat. Sekarang ketika saya menggulir ke bawah ke yang kedua dan kemudian mengubah fragmen dan kembali, itu hancur (Hal yang sama terjadi dengan yang pertama). Jadi saya harus mengubah kedua Viewpagers.
Bagaimanapun, baca di bawah ini untuk menemukan solusi yang berfungsi. Galat Crash di bawah ini:
java.lang.IllegalArgumentException: No view found for id 0x7f0c0098 (com.kk:id/pagerDetailAndTips) for fragment ProductDetailsAndTipsFragment{189bcbce #0 id=0x7f0c0098}
Menghabiskan berjam-jam men-debug-nya. Baca posting Utas lengkap ini sampai bagian bawah menerapkan semua solusi termasuk memastikan bahwa saya melewati childFragmentManager.
Tidak ada yang berhasil.
Akhirnya alih-alih menggunakan FragmentStatePagerAdapter, saya memperluas PagerAdapter dan menggunakannya di Viewpager tanpa Menggunakan fragmen. Saya percaya beberapa di mana ada BUG dengan fragmen bersarang. Bagaimanapun, kami memiliki opsi. Baca ...
Tautan di bawah ini sangat membantu:
Viewpager Tanpa Fragmen
Tautan mungkin mati sehingga saya memposting Solusi saya yang diterapkan di sini di bawah:
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;
}
}
Semoga ini bermanfaat !!