Eu estava enfrentando um erro desagradável ao usar o Viewpager no Recycler View. Abaixo erro que eu enfrentei em uma situação especial. Iniciei um fragmento que tinha um RecyclerView com Viewpager (usando FragmentStatePagerAdapter). Funcionou bem até que eu mudei para um fragmento diferente ao clicar em uma célula no RecyclerView e naveguei de volta usando o botão Voltar do hardware do telefone e o aplicativo travou.
E o engraçado é que eu tinha dois Viewpagers no mesmo RecyclerView e ambos estavam a cerca de 5 células de distância (outros não estavam visíveis na tela, estavam em baixo). Então, inicialmente eu apenas apliquei a solução no primeiro Viewpager e deixei a outra como está (Viewpager usando fragmentos).
A navegação de volta funcionou bem, quando o pager da primeira visualização estava visível. Agora, quando eu rolei para o segundo e depois troquei o fragmento e voltei, ele caiu (a mesma coisa aconteceu com o primeiro). Então eu tive que mudar os dois Viewpagers.
De qualquer forma, leia abaixo para encontrar a solução de trabalho. Erro de falha abaixo:
java.lang.IllegalArgumentException: No view found for id 0x7f0c0098 (com.kk:id/pagerDetailAndTips) for fragment ProductDetailsAndTipsFragment{189bcbce #0 id=0x7f0c0098}
Passou horas depurando-o. Leia esta postagem completa do Thread até a parte inferior, aplicando todas as soluções, incluindo a certeza de que estou passando childFragmentManager.
Nada funcionou.
Finalmente, em vez de usar o FragmentStatePagerAdapter, estendi o PagerAdapter e o usei no Viewpager sem Usar fragmentos. Eu acredito que alguns onde há um erro com fragmentos aninhados. Enfim, temos opções. Ler ...
O link abaixo foi muito útil:
Viewpager sem fragmentos
O link pode morrer, por isso estou postando minha solução implementada aqui abaixo:
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;
}
}
ESPERANÇA isso foi útil !!