Estaba enfrentando un error desagradable al usar Viewpager en Recycler View. Debajo del error que enfrenté en una situación especial. Comencé un fragmento que tenía un RecyclerView con Viewpager (usando FragmentStatePagerAdapter). Funcionó bien hasta que cambié a un fragmento diferente al hacer clic en una Celda en RecyclerView, y luego volví a navegar usando el botón Atrás del hardware del teléfono y la aplicación se bloqueó.
Y lo divertido de esto es que tenía dos Viewpagers en el mismo RecyclerView y ambos estaban a unas 5 celdas de distancia (el otro no era visible en la pantalla, estaba inactivo). Así que inicialmente solo apliqué la Solución al primer Viewpager y dejé otra como está (Viewpager usando Fragmentos).
Navegar hacia atrás funcionó bien, cuando la primera vista del localizador era visible. Ahora, cuando me desplacé hacia el segundo y luego cambié el fragmento y regresé, se estrelló (lo mismo sucedió con el primero). Así que tuve que cambiar los dos Viewpagers.
De todos modos, lea a continuación para encontrar una solución de trabajo. Error de bloqueo a continuación:
java.lang.IllegalArgumentException: No view found for id 0x7f0c0098 (com.kk:id/pagerDetailAndTips) for fragment ProductDetailsAndTipsFragment{189bcbce #0 id=0x7f0c0098}
Pasé horas depurándolo. Lea esta publicación completa de Thread hasta el final aplicando todas las soluciones, incluso asegurándose de que estoy pasando childFragmentManager.
Nada funcionó.
Finalmente, en lugar de usar FragmentStatePagerAdapter, extendí PagerAdapter y lo usé en Viewpager sin usar fragmentos. Creo que hay algunos donde hay un ERROR con fragmentos anidados. De todos modos, tenemos opciones. Leer ...
El siguiente enlace fue muy útil:
Visor sin fragmentos
El enlace puede morir, así que estoy publicando mi Solución implementada a continuación:
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;
}
}
Espero que esto haya sido útil.