Recycler View 内で Viewpager を使用すると、厄介なエラーが発生しました。以下のエラーは、特別な状況で直面しました。Viewpager(FragmentStatePagerAdapterを使用)でRecyclerViewを持つフラグメントを開始しました。RecyclerView でセルをクリックして別のフラグメントに切り替え、電話のハードウェアの [戻る] ボタンを使用して戻るとアプリがクラッシュするまではうまくいきました。
そして、これについて面白いのは、同じ RecyclerView に 2 つの Viewpager があり、両方とも約 5 セル離れていたことです (他は画面に表示されず、ダウンしていました)。そのため、最初にソリューションを最初のビューページャーに適用し、他のビューページャーをそのまま残しました(フラグメントを使用するビューページャー)。
最初のビューページャーが表示可能だったとき、ナビゲートバックは正常に機能しました。2番目のものまでスクロールしてからフラグメントを変更して戻ってきたとき、クラッシュしました(最初のものでも同じことが起こりました)。そのため、両方の Viewpager を変更する必要がありました。
とにかく、以下を読んで実用的な解決策を見つけてください。以下のクラッシュエラー:
java.lang.IllegalArgumentException: No view found for id 0x7f0c0098 (com.kk:id/pagerDetailAndTips) for fragment ProductDetailsAndTipsFragment{189bcbce #0 id=0x7f0c0098}
デバッグに何時間も費やしました。この完全なスレッドの投稿を最後まで読んで、childFragmentManager を渡していることを確認するなど、すべてのソリューションを適用してください。
何も機能しませんでした。
最後に、 FragmentStatePagerAdapter を使用する代わりに、 PagerAdapter を拡張し、フラグメントを使用せずに Viewpager で使用しました。フラグメントがネストされたバグがあると思います。とにかく、私たちには選択肢があります。読んだ ...
以下のリンクは非常に役に立ちました:
フラグメントのないビューページャー
リンクが死ぬ可能性があるので、実装したソリューションを以下に投稿します。
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;
}
}
これが役に立ったことを願っています!!