viewpager uso tutorial studio start llamar fragments example desde activity android android-fragments android-viewpager android-support-library android-nested-fragment

android - uso - Fragmentos anidados getchildfragmentmanager causando bloqueo



start fragment (2)

Tengo viewPager que contiene fragmentos cada uno de estos fragmentos tiene viewpager para mostrar imágenes y pancartas

ahora a cada fragmento Adaptador de imagen Estoy pasando getChildFragmentManager () como abajo

CarouselAdapter carouselAdapter = new CarouselAdapter(getChildFragmentManager());

Pero el código anterior causa un bloqueo al cambiar las pestañas de viewpager que muestran el siguiente mensaje

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

Pero si apruebo getFragmentManager () no se bloquea, pero el adaptador deja en blanco durante algún tiempo cualquier Idea sobre cómo manejar los fragmentos anidados.

Estoy usando FragmentPagerAdapter para ambos viewpagers pero aún no funciona

Lo siguiente es 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)

A continuación se muestra el código del adaptador del carrusel

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

Lo que sigue es deslizar el código del adaptador de pestaña

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

Cada fragmento de pestaña deslizante tiene recyclerview esta vista de reciclaje contiene carrusel viewpager siguiente es el código en 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); }


Reemplazó FragmentPagerAdapter por FragmentStatePagerAdapter para el problema resuelto de fragmento principal y secundario para mí.


Está utilizando getChildFragmentManager para fragmentos anidados que es correcto.

Qué estás haciendo:

En su caso, cuando los fragmentos se desean adjuntar al viewpager (del niño), pero aquí el viewpager no está adjunto a su elemento principal (aún separado).

Lo que debes hacer:

Cree un ViewPager personalizado anule su onAttachedToWindow y haga el adaptador de conjunto perezoso.

Para obtener más detalles, eche un vistazo a IllegalArgumentException: no se ha encontrado ninguna vista para id for fragment - ViewPager en ViewPager .

Actualizar:

Si desea utilizar getFragmentManager o getSupportFragmentManager cambie la clase padre de su PagerAdapter de android.support.v4.app.FragmentPagerAdapter a android.support.v4.app.FragmentStatePagerAdapter .