Bei der Verwendung von Viewpager in der Recycler-Ansicht trat ein böser Fehler auf. Der untenstehende Fehler trat in einer speziellen Situation auf. Ich startete ein Fragment, das eine RecyclerView mit Viewpager (mit FragmentStatePagerAdapter) hatte. Es funktionierte gut, bis ich zu einem anderen Fragment auf Klick auf eine Zelle in RecyclerView gewechselt, und dann navigierte zurück mit Telefon-Hardware Zurück-Taste und App abgestürzt.
Und was ist lustig daran war, dass ich zwei Viewpager in der gleichen RecyclerView hatte und beide waren etwa 5 Zellen entfernt (andere war nicht sichtbar auf dem Bildschirm, es war unten). Also habe ich die Lösung zunächst nur auf den ersten Viewpager angewendet und den anderen so belassen, wie er ist (Viewpager mit Fragmenten).
Das Zurücknavigieren funktionierte problemlos, wenn der erste Pager angezeigt wurde. Wenn ich nun zum zweiten scrollte und dann das Fragment änderte und zurückkam, stürzte es ab (das Gleiche passierte mit dem ersten). Also musste ich die beiden Viewpager ändern.
Wie auch immer, lesen Sie unten, um eine funktionierende Lösung zu finden. Absturz Fehler unten:
java.lang.IllegalArgumentException: No view found for id 0x7f0c0098 (com.kk:id/pagerDetailAndTips) for fragment ProductDetailsAndTipsFragment{189bcbce #0 id=0x7f0c0098}
Ich habe Stunden mit der Fehlersuche verbracht. Lesen Sie diese komplette Thread Beitrag bis zum Ende Anwendung alle Lösungen einschließlich der Sicherstellung, dass ich childFragmentManager übergeben.
Nichts hat funktioniert.
Schließlich anstelle der Verwendung von FragmentStatePagerAdapter , ich erweitert PagerAdapter und verwendet es in Viewpager ohne Verwendung von Fragmenten. Ich glaube, irgendwo gibt es einen BUG mit verschachtelten Fragmenten. Wie auch immer, wir haben Optionen. Lesen ...
Der untenstehende Link war sehr hilfreich:
Viewpager ohne Fragmente
Der Link kann verloren gehen, deshalb poste ich meine implementierte Lösung hier unten:
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;
}
}
Ich hoffe, das war hilfreich!