6

je viewPager qui contient des fragments chacun de ces fragments a viewpager pour afficher des images et des bannièresfragments emboîtées getchildfragmentmanager provoquant l'accident

maintenant à chaque adaptateur d'image fragment Je passe getChildFragmentManager() comme ci-dessous

CarouselAdapter carouselAdapter = new CarouselAdapter(getChildFragmentManager()); 

mais au-dessus du code est à l'origine accident tout en changeant les onglets de viewpager montrant message suivant

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

mais si je passe getFragmentMana ger() il ne s'écrase pas mais l'adaptateur devient vide pendant quelque temps Idée comment gérer les fragments imbriqués.

J'utilise FragmentPagerAdapter pour les deux viewpagers mais sa ne fonctionne pas

Après est crashlog

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) 

Après Carousel code Adaptateur

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); 
} 
} 

suivant est coulissant onglet Code adaptateur

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(); 
} 
} 

Chaque fragment de languette coulissante a recyclerview ce recylerview contient carrousel viewpager suivant est le code dans 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

L'utilisation de getChildFragmentManager() est la méthode correcte. Je ne sais pas pourquoi cela ne fonctionne pas dans votre cas. Vérifiez si d'autres choses sont bonnes. – Pruthviraj

+0

'CarouselAdapter' est-il fait par vous ou a-t-il été emprunté à une bibliothèque? – Nilabja

+0

s'il vous plaît fournir le code qui provoque l'accident et complet journal des accidents. –

Répondre

6

Vous utilisez getChildFragmentManager des fragments imbriqués qui est correct.

Qu'est-ce que vous faites:

Dans votre cas, lorsque les fragments veut être attaché à la viewpager (enfant) mais ici le viewpager n'est pas attaché à son parent (encore détaché).

Ce que vous devez faire:

Créer une coutume ViewPager passer outre son onAttachedToWindow et faire l'adaptateur jeu paresseux. Pour plus de détails, consultez IllegalArgumentException: No view found for id for fragment — ViewPager in ViewPager.

Mise à jour:

Si vous souhaitez utiliser getFragmentManager ou getSupportFragmentManager que changer la classe parente de votre PagerAdapterandroid.support.v4.app.FragmentPagerAdapter-android.support.v4.app.FragmentStatePagerAdapter.

+0

faisant de même mais toujours obtenir la même erreur – Erum

0

Remplacé FragmentPagerAdapter par FragmentStatePagerAdapter pour le problème de l'enfant et du fragment parent résolu pour moi.

+0

Votre réponse correspond à la réponse déjà donnée. Vous devriez accepter cela plutôt que d'ajouter votre propre réponse basée sur celle de quelqu'un. –

+0

bien sûr va le faire – apk