Recycler View内でViewpagerを使用すると、厄介なエラーが発生しました。エラーの下で、私は特別な状況で直面しました。(FragmentStatePagerAdapterを使用して)ViewpagerでRecyclerViewを持つフラグメントを開始しました。RecyclerViewでセルをクリックして別のフラグメントに切り替え、電話のハードウェアの[戻る]ボタンを使用して戻ってアプリがクラッシュするまで、うまく機能しました。
これの面白い点は、同じRecyclerViewに2つのViewpagerがあり、両方とも約5セル離れていたことです(他は画面に表示されず、ダウンしていました)。そのため、最初は最初のViewpagerにソリューションを適用し、他のものはそのままにしました(フラグメントを使用するViewpager)。
最初のビューページャーが表示可能だったときに、戻る操作がうまくいきました。今、私が下にスクロールして2番目のものにスクロールしてからフラグメントを変更して戻ってきたとき、それはクラッシュしました(最初のものと同じことが起こりました)。だから私は両方のページャーを変更しなければなりませんでした。
とにかく、以下を読んで実用的な解決策を見つけてください。以下のクラッシュエラー:
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;
}
}
これが役に立てば幸い!