Recycler View içinde Viewpager kullanırken kötü bir hatayla karşı karşıya kaldım. Hatanın altında özel bir durumla karşılaştım. Viewpager ile (FragmentStatePagerAdapter kullanarak) bir RecyclerView olan bir parça başlattım. RecyclerView'da bir Hücrenin tıklanmasında farklı bir parçaya geçene ve Telefonun donanım Geri düğmesini ve Uygulama çöktüğünde geri dönene kadar iyi çalıştı.
Ve buradaki komik olan, aynı RecyclerView'de iki Viewpager'ım olması ve her ikisinin de yaklaşık 5 hücre uzakta olmasıydı (diğerleri ekranda görünmüyordu, aşağıdaydı). Bu yüzden başlangıçta Çözümü ilk Viewpager'a uyguladım ve diğerini olduğu gibi bıraktım (Parçalar kullanarak Viewpager).
İlk görüntüleme çağrı cihazı görüntülenebildiğinde, geri gitmek iyi çalıştı. Şimdi ikincisine ilerlediğimde parçayı değiştirip geri döndüğümde, çöktü (birincisi ile aynı şey oldu). Bu yüzden her iki Vizörü de değiştirmek zorunda kaldım.
Her neyse, çalışma çözümünü bulmak için aşağıyı okuyun. Aşağıdaki Kilitlenme Hatası:
java.lang.IllegalArgumentException: No view found for id 0x7f0c0098 (com.kk:id/pagerDetailAndTips) for fragment ProductDetailsAndTipsFragment{189bcbce #0 id=0x7f0c0098}
Hata ayıklamak için saatler geçirdim. ChildFragmentManager'ı geçirdiğimden emin olmak da dahil olmak üzere tüm çözümleri uygulayana kadar bu Konu başlığını okuyun.
Hiçbir şey çalışmadı.
Son olarak FragmentStatePagerAdapter kullanmak yerine, PagerAdapter'i genişlettim ve parçaları kullanmadan Viewpager'da kullandım. İç içe parçalara sahip bir HATA olduğu yerlere inanıyorum. Her neyse, seçeneklerimiz var. Oku ...
Aşağıdaki bağlantı çok yardımcı oldu:
Parçasız Viewpager
Bağlantı ölebilir, bu yüzden aşağıda benim uyguladığım Çözümü aşağıda gönderiyorum:
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;
}
}
Umarım bu yardımcı oldu!