6

我有viewPager其中包含的片段的每个这些片段的具有viewpager以显示图像和横幅嵌套片段getchildfragmentmanager引起崩溃

现在

到我传递getChildFragmentManager()如下面的每个片段图片适配器

CarouselAdapter carouselAdapter = new CarouselAdapter(getChildFragmentManager()); 

但上面的代码导致崩溃,同时改变viewpager选项卡显示以下消息

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

但是,如果我通过getFragmentMana ger()它没有崩溃,但适配器在一段时间内空白任何想法如何处理嵌套的片段。

我使用FragmentPagerAdapter两个viewpagers但还是它不工作

以下是系统崩溃日志

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

以下是滑片适配器代码

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

是你制作的'CarouselAdapter'还是从任何图书馆借来的? – Nilabja

+0

请提供导致崩溃和完整崩溃日志的代码。 –

回答

6

您正在使用getChildFragmentManager嵌套的片段是正确的。

你在做什么:

在你的情况下,当片段要连接到(孩子)的viewpager但这里的viewpager没有连接到它的父(仍然分离)。

你应该做的:

创建自定义ViewPager覆盖其onAttachedToWindow并做懒集适配器。

欲了解更多详情,请看IllegalArgumentException: No view found for id for fragment — ViewPager in ViewPager

更新:

如果你想使用getFragmentManagergetSupportFragmentManager比父类的PagerAdapterandroid.support.v4.app.FragmentPagerAdapter改变android.support.v4.app.FragmentStatePagerAdapter

+0

做同样的事情,但仍然有相同的错误 – Erum

0

由FragmentStatePagerAdapter替代子代和父代片段的FragmentPagerAdapter解决了我的问题。

+0

您的答案与已经给出的答案相匹配。你应该接受,而不是基于某人的自己的答案。 –

+0

好的,一定会这样做的 – apk