6

के कारण getchildfragmentmanager मैं viewPager जो टुकड़े इन टुकड़ा में से प्रत्येक के चित्र प्रदर्शित करने के लिए viewpager है और बैनरनेस्टेड टुकड़े दुर्घटना

प्रत्येक खंड छवि अनुकूलक मैं नीचे के रूप में getChildFragmentManager() गुजर रहा करने के लिए

अब शामिल है

CarouselAdapter carouselAdapter = new CarouselAdapter(getChildFragmentManager()); 

लेकिन उपरोक्त कोड क्रैश का कारण बन रहा है जबकि दर्शक संदेश को निम्नलिखित संदेश दिखा रहा है

java.lang.IllegalArgumentException: No view found for id 0x7f1000ef 

लेकिन अगर मैं getFragmentMana पास करता हूं ger() यह क्रैश नहीं हो रहा है लेकिन कुछ समय के लिए एडेप्टर रिक्त हो जाता है, किसी भी विचार को नेस्टेड टुकड़ों को कैसे संभालना है।

मैं दोनों viewpagers के लिए FragmentPagerAdapter उपयोग कर रहा हूँ, लेकिन अभी भी इसके बाद

काम नहीं कर रहा

java.lang.IllegalArgumentException: No view found for id 0x7f1000ef (com.packagename:id/viewPagerBanners) for fragment MainBannerFragmentNew{308cb84 #0 id=0x7f1000ef android:switcher:2131755247:0} 
                     at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1292) 
                     at android.support.v4.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManager.java:1523) 
                     at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1585) 
                     at android.support.v4.app.FragmentManagerImpl.dispatchActivityCreated(FragmentManager.java:2832) 
                     at android.support.v4.app.Fragment.performActivityCreated(Fragment.java:2199) 
                     at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1323) 
                     at android.support.v4.app.FragmentManagerImpl.moveFragmentsToInvisible(FragmentManager.java:2323) 
                     at android.support.v4.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2136) 
                     at android.support.v4.app.FragmentManagerImpl.optimizeAndExecuteOps(FragmentManager.java:2092) 
                     at android.support.v4.app.FragmentManagerImpl.execSingleAction(FragmentManager.java:1969) 
                     at android.support.v4.app.BackStackRecord.commitNowAllowingStateLoss(BackStackRecord.java:620) 
                     at android.support.v4.app.FragmentPagerAdapter.finishUpdate(FragmentPagerAdapter.java:143) 
                     at android.support.v4.view.ViewPager.populate(ViewPager.java:1268) 
                     at android.support.v4.view.ViewPager.populate(ViewPager.java:1116) 
                     at android.support.v4.view.ViewPager$3.run(ViewPager.java:273) 
                     at android.view.Choreographer$CallbackRecord.run(Choreographer.java:858) 
                     at android.view.Choreographer.doCallbacks(Choreographer.java:670) 
                     at android.view.Choreographer.doFrame(Choreographer.java:603) 
                     at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:844) 
                     at android.os.Handler.handleCallback(Handler.java:746) 
                     at android.os.Handler.dispatchMessage(Handler.java:95) 
                     at android.os.Looper.loop(Looper.java:148) 
                     at android.app.ActivityThread.main(ActivityThread.java:5443) 
                     at java.lang.reflect.Method.invoke(Native Method) 
                     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:728) 
                     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618) 

बाद हिंडोला एडाप्टर कोड

public class CarouselAdapter extends FragmentPagerAdapter { 

private List<CarouselItem> carouselItemsList; 

public CarouselAdapter(FragmentManager fm, List<CarouselItem> carouselItemsList) { 
    super(fm); 
    this.carouselItemsList = carouselItemsList; 

} 

@Override 
public Fragment getItem(int position) { 
    return MainBannerFragmentNew.newInstance(R.drawable.gray_logo, carouselItemsList.get(position)); 
} 

@Override 
public int getCount() { 
    return carouselItemsList.size(); 
} 

@Override 
public void destroyItem(ViewGroup container, int position, Object object) { 
    super.destroyItem(container, position, object); 
} 
} 

बाद टैब एडाप्टर कोड

रपट है crashlog है
public class HomeTabsPagerAdapter extends FragmentPagerAdapter { 
ArrayList<HomeTabItem> homeTabItems; 

public HomeTabsPagerAdapter(FragmentManager manager, ArrayList<HomeTabItem> homeTabItems) { 
    super(manager); 
    this.homeTabItems = homeTabItems; 
} 

@Override 
public Fragment getItem(int position) { 
    HomeTabItem homeTabItem = homeTabItems.get(position); 
    return OfferZoneFragment.newInstance(homeTabItem.getId()); 

} 

@Override 
public int getCount() { 
    return homeTabItems.size(); 
} 

@Override 
public CharSequence getPageTitle(int position) { 
    return homeTabItems.get(position).getTitle(); 
} 
} 

हर रपट टैब टुकड़ा recyclerview इस recylerview निम्नलिखित viewpager हिंडोला शामिल है bindview

में कोड
((BannerHolder) holder).viewPager.setAdapter(new CarouselAdapter(fragmentManager, homePageItems.get(position).carouselItems)); 
       ((BannerHolder) holder).circlePageIndicator.setViewPager(((BannerHolder) holder).viewPager); 
       final float density = context.getResources().getDisplayMetrics().density; 
       ((BannerHolder) holder).circlePageIndicator.setBackgroundColor(0x00000000); 
       ((BannerHolder) holder).circlePageIndicator.setRadius(5 * density); 
       ((BannerHolder) holder).circlePageIndicator.setFillColor(ContextCompat.getColor(context, R.color.appthemecolor)); 
       ((BannerHolder) holder).circlePageIndicator.setPageColor(0xFFFFFFFF); 
       ((BannerHolder) holder).circlePageIndicator.setStrokeColor(0x00000000); 
       ((BannerHolder) holder).circlePageIndicator.setStrokeWidth(2 * density); 
       if (((BannerHolder) holder).viewPager.getAdapter().getCount() <= 1) { 
        ((BannerHolder) holder).circlePageIndicator.setVisibility(View.GONE); 
       } else { 
        ((BannerHolder) holder).circlePageIndicator.setVisibility(View.VISIBLE); 
       } 
+0

getChildFragmentManager() का उपयोग करना इसे करने का सही तरीका है। पता नहीं क्यों यह आपके मामले में काम नहीं कर रहा है। जांचें कि क्या अन्य चीजें सही हैं। – Pruthviraj

+0

आपके द्वारा बनाई गई 'कैरोसेल एडाप्टर' है या किसी पुस्तकालय से उधार लिया गया है? – Nilabja

+0

कृपया कोड प्रदान करें जो क्रैश और पूर्ण क्रैश लॉग का कारण बन रहा है। –

उत्तर

6

आप नेस्टेड टुकड़े जो सही है के लिए getChildFragmentManager का उपयोग कर रहे है।

तुम क्या कर रहे:

आपके मामले में टुकड़े (बच्चे की) viewpager के साथ संलग्न किया है, लेकिन यहाँ viewpager अपनी मूल से जुड़ी नहीं है चाहता है जब (अब भी अलग)।

आपको क्या करना चाहिए:

एक कस्टम ViewPager अपने onAttachedToWindow ओवरराइड और आलसी सेट अनुकूलक करना बनाएँ।

अधिक जानकारी के लिए IllegalArgumentException: No view found for id for fragment — ViewPager in ViewPager पर एक नज़र डालें।

अद्यतन:

आप उपयोग getFragmentManager या getSupportFragmentManager से android.support.v4.app.FragmentPagerAdapter से android.support.v4.app.FragmentStatePagerAdapter करने के लिए अपने PagerAdapter की मूल वर्ग बदलना चाहते हैं।

+0

जोड़ा गया है लेकिन फिर भी वही त्रुटि मिल रही है – Erum

0

बच्चे और अभिभावक खंड दोनों के लिए FragmentStatePagerAdapter द्वारा FragmentPagerAdapter को बदले में मेरे लिए हल हल किया गया।

+0

आपका उत्तर पहले से दिए गए उत्तर से मेल खाता है। आपको किसी के आधार पर अपना उत्तर जोड़ने के बजाय इसे स्वीकार करना चाहिए। –

+0

ठीक है यह सुनिश्चित करेगा – apk

संबंधित मुद्दे