ฉันพบข้อผิดพลาดที่น่ารังเกียจเมื่อใช้ Viewpager ภายใน Recycler View ฉันพบข้อผิดพลาดด้านล่างในสถานการณ์พิเศษ ฉันเริ่มแฟรกเมนต์ที่มี RecyclerView พร้อม Viewpager (โดยใช้ FragmentStatePagerAdapter) มันทำงานได้ดีจนกระทั่งฉันเปลี่ยนไปใช้แฟรกเมนต์ที่แตกต่างกันเมื่อคลิกเซลล์ใน RecyclerView แล้วสำรวจกลับโดยใช้ปุ่มฮาร์ดแวร์ย้อนกลับของโทรศัพท์และแอพหยุดทำงาน
และสิ่งที่ตลกเกี่ยวกับเรื่องนี้ก็คือฉันมี Viewpagers สองคนใน RecyclerView เดียวกันและทั้งคู่ห่างออกไปประมาณ 5 เซลล์ (ส่วนอื่นไม่ปรากฏบนหน้าจอมันลง) ดังนั้นในตอนแรกฉันเพิ่งนำ Solution ไปใช้กับ Viewpager ตัวแรกและปล่อยอีกอันตามที่เป็นอยู่ (Viewpager ที่ใช้ Fragments)
การนำทางกลับมาทำงานได้ดีเมื่อเพจเจอร์มุมมองแรกสามารถดูได้ ตอนนี้เมื่อฉันเลื่อนลงไปที่ชิ้นที่สองจากนั้นเปลี่ยนชิ้นส่วนและกลับมามันล้มเหลว (สิ่งเดียวกันเกิดขึ้นกับชิ้นแรก) ดังนั้นฉันต้องเปลี่ยนทั้งผู้ดู
อย่างไรก็ตามอ่านด้านล่างเพื่อหาวิธีการทำงาน ข้อผิดพลาดด้านล่าง:
java.lang.IllegalArgumentException: No view found for id 0x7f0c0098 (com.kk:id/pagerDetailAndTips) for fragment ProductDetailsAndTipsFragment{189bcbce #0 id=0x7f0c0098}
ใช้เวลาหลายชั่วโมงในการดีบั๊ก อ่านกระทู้นี้จนจบด้านล่างใช้วิธีแก้ไขปัญหาทั้งหมดรวมถึงการทำให้แน่ใจว่าฉันผ่าน childFragmentManager
ไม่มีอะไรทำงาน
ในที่สุดแทนที่จะใช้ FragmentStatePagerAdapter ฉันขยาย PagerAdapter และใช้ใน Viewpager โดยไม่ต้องใช้แฟรกเมนต์ ฉันเชื่อว่ามี BUG ที่มีชิ้นส่วนซ้อนกันอยู่ อย่างไรก็ตามเรามีตัวเลือก อ่าน ...
ลิงค์ด้านล่างมีประโยชน์มาก:
ผู้ชมที่ไม่มีแฟรกเมนต์
ลิงก์อาจตายดังนั้นฉันโพสต์โซลูชันที่นำไปใช้ของฉันที่นี่ด้านล่าง:
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;
}
}
หวังว่านี่จะเป็นประโยชน์ !!