6

У меня есть ViewPager, который содержит фрагменты каждого из этих фрагментов имеет ViewPager для отображения изображений и баннеровВложенные фрагменты getchildfragmentmanager вызывая аварии

теперь к каждому адаптеру фрагмент изображения я передаю getChildFragmentManager(), как показано ниже

CarouselAdapter carouselAdapter = new CarouselAdapter(getChildFragmentManager()); 

Но выше кода вызывает сбой при изменении ViewPager вкладки, показывающие следующее сообщение

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

Но если я прохожу getFragmentMana ger() он не сбой, но адаптер в течение некоторого времени остается пустым. Идея, как обрабатывать вложенные фрагменты.

Я использую FragmentPagerAdapter для обеих viewpagers, но до сих пор ее не работает

Ниже 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) 

Ниже карусельного код адаптера

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.

Update:

Если вы хотите использовать getFragmentManager или getSupportFragmentManager, чем изменить родительский класс вашего PagerAdapter от android.support.v4.app.FragmentPagerAdapter к android.support.v4.app.FragmentStatePagerAdapter.

+0

делать то же самое, но все равно получать ту же ошибку – Erum

0

Заменен FragmentPagerAdapter от FragmentStatePagerAdapter для решения как для дочернего, так и для родительского фрагмента для меня.

+0

Ваш ответ совпадает с уже предоставленным ответом. Вы должны принять это, а не добавлять свой собственный ответ, основанный на чьем-то. –

+0

нормально, что это сделает – apk

 Смежные вопросы

  • Нет связанных вопросов^_^