Necesito colocar un ViewPager en el interior de un fragmento, pero tengo dos fragmentos, el Fragmento 1 es mi MENÚ, y Fragmento 2 quiero usar como un ViewPagerIndicator.

Sino un fragmento no puede tener otro fragmento… ¿qué tengo que hacer para que?

Cómo establecer un ViewPager dentro de un Fragmento de

6 Comentarios

  1. 95

    Partir de Android 4.2, hay anidada fragmentos.http://developer.android.com/about/versions/android-4.2.html#NestedFragments El apoyo de la biblioteca ahora también incluye soporte para este para mayores versiones de Android.

    Así que usted puede hacer algo como esto:

    @Override
        public void onViewCreated(View view, Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
    
        ViewPager mViewPager = (ViewPager) view.findViewById(R.id.viewPager);
        mViewPager.setAdapter(new MyAdapter(getChildFragmentManager()));
        }

    Plena aplicación disponible aquí: https://github.com/marcoRS/nested-fragments/tree/master/src/com/burnside/digital/nestedfragments

    • Pero no es posible porque yo no puedo poner un FragmentActivity dentro de mi Fragmento 2 , debido a que el fragmento de los padres es un FragmentActivity, y el niño(fragmento 2) tiene que ser un fragmentActivity tener las pestañas.. y en el github ejemplo no poner un fragmento dentro de un otro fragmento.
    • ¿Por qué usted necesita tener fragmento 1? Puede no tener un viewpager que hace referencia a los distintos fragmentos y, a continuación, han Fragmento 2 por debajo de ella?
    • pero el fragmento 1 es siempre el mismo, y esto se vería cambios, y no quiero eso.. alguna idea?
    • Oh Gracias @RSenApps, estás a salvo mi vida!
    • Excelente , Gracias
    • sí, Simplemente uso getChildFragmetManager() en Lugar de getFragmentManager() o getSupportFragmentManger(),al iniciar el adaptador. Y definitivamente funciona 🙂 ,Feliz de Codificación.
    • Se Trabajó. Yo estaba usando getSupportFragmentManager() en lugar de getChildFragmentManager() cuando se inicializa el ViewPagerAdapter en el interior del fragmento .

  2. 31

    Debe utilizar getChildFragmentManager() en lugar de getSupportFragmentManager() para obtener el FragmentManger dentro de un Fragmento.
    Pero usted no debe usar FragmentStatePagerAdapter en lugar de FragmentPagerAdapter.

    • Gracias, trabajo para mí!
  3. 2

    es posible. trate de hacer este código view_pager_fragment.xml archivo

    <android.support.design.widget.AppBarLayout
        android:id="@+id/appBarLayout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">
    
        <android.support.design.widget.TabLayout
            android:id="@+id/tab"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />
    
    </android.support.design.widget.AppBarLayout>
    
    <android.support.v4.view.ViewPager
        android:id="@+id/viewpager"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layout_behavior="@string/appbar_scrolling_view_behavior" />

    ViewPagerFragment

    ViewPager viewPager;
    TabLayout tabLayout;
    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.tracks, container, false);
    viewPager = (ViewPager) view.findViewById(R.id.viewpager);
    tabLayout = (TabLayout) view.findViewById(R.id.tab);
    return view;
    }
    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
    setupViewPager(viewPager);
    tabLayout.setupWithViewPager(viewPager);
    tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
    @Override
    public void onTabSelected(TabLayout.Tab tab) {
    }
    @Override
    public void onTabUnselected(TabLayout.Tab tab) {
    }
    @Override
    public void onTabReselected(TabLayout.Tab tab) {
    }
    });
    }
    private void setupViewPager(ViewPager viewPager) {
    ViewPagerAdapter viewPagerAdapter = new ViewPagerAdapter(getChildFragmentManager());``
    viewPagerAdapter.addFragment(new FirstFragment(), "First");
    viewPagerAdapter.addFragment(new SecoundFragment(), "Secound");
    viewPagerAdapter.addFragment(new LoginFragment(), "Login");
    viewPager.setAdapter(viewPagerAdapter);
    }
    private class ViewPagerAdapter extends FragmentPagerAdapter {
    List<Fragment> fragmentList = new ArrayList<>();
    List<String> fragmentTitles = new ArrayList<>();
    public ViewPagerAdapter(FragmentManager fragmentManager) {
    super(fragmentManager);
    }
    @Override
    public Fragment getItem(int position) {
    return fragmentList.get(position);
    }
    @Override
    public int getCount() {
    return fragmentList.size();
    }
    @Override
    public CharSequence getPageTitle(int position) {
    return fragmentTitles.get(position);
    }
    public void addFragment(Fragment fragment, String name) {
    fragmentList.add(fragment);
    fragmentTitles.add(name);
    }
    }
  4. 1

    Solo uso getChildFragmentManager() en lugar de getSupportFragmentManager() en el interior de los Fragmentos.

    En El Interior De Los Fragmentos

    new ViewPagerAdapter(getChildFragmentManager());

    Dentro De La Actividad

    new ViewPagerAdapter(getSupportFragmentManager());

    Simple Código

    fragment_sample.xml diseño

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">
    <com.google.android.material.tabs.TabLayout
    android:id="@+id/tablayout"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" />
    <androidx.viewpager.widget.ViewPager
    android:id="@+id/viewpager"
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight="1" />
    </LinearLayout>

    SampleFragment.java clase

    public class SampleFragment extends Fragment {
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View fragmentView = inflater.inflate(R.layout.fragment_sample, container, false);
    return fragmentView;
    }
    @Override
    public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);
    //find views by id
    ViewPager viewPager = view.findViewById(R.id.viewpager);
    TabLayout tabLayout = view.findViewById(R.id.tablayout);
    //attach tablayout with viewpager
    tabLayout.setupWithViewPager(viewPager);
    ViewPagerAdapter adapter = new ViewPagerAdapter(getChildFragmentManager());
    //add your fragments
    adapter.addFrag(new SampleFragment(), "Tab1");
    adapter.addFrag(new SampleFragment2(), "Tab2");
    adapter.addFrag(new SampleFragment3(), "Tab3");
    //set adapter on viewpager
    viewPager.setAdapter(adapter);
    }
    }

    ViewPagerAdapter.java clase

    public class ViewPagerAdapter extends FragmentStatePagerAdapter {
    private final List<Fragment> mFragmentList = new ArrayList<>();
    private final List<String> mFragmentTitleList = new ArrayList<>();
    public ViewPagerAdapter(FragmentManager manager) {
    super(manager);
    }
    @Override
    public Fragment getItem(int position) {
    return mFragmentList.get(position);
    }
    @Override
    public int getCount() {
    return mFragmentList.size();
    }
    @Override
    public CharSequence getPageTitle(int position) {
    return mFragmentTitleList.get(position);
    }
    public void addFrag(Fragment fragment) {
    mFragmentList.add(fragment);
    mFragmentTitleList.add("");
    }
    public void addFrag(Fragment fragment, String title) {
    mFragmentList.add(fragment);
    mFragmentTitleList.add(title);
    }
    }

    Importante Enlaces Relacionados

    • SampleFragment() en la línea de adapter.addFrag(new SampleFragment(), "Tab1"); debe ser cambiado a SampleFragment1(), desde SampleFragment() ya está definido como el fragmento de la celebración de la ViewPager @Khemraj
  5. 0

    Con el Soporte para Android V4 de la biblioteca, usted puede agregar un fragmento dentro de otro fragmento. Pruebe a utilizar, es posible que pueda resolver su problema.

    • Pero no es posible porque yo no puedo poner un FragmentActivity dentro de mi Fragmento 2 , debido a que el fragmento de los padres es un FragmentActivity, y el niño(fragmento 2) tiene que ser un fragmentActivity tener las pestañas.. alguna idea?
    • Ah, pero espera, usted puede poner 2 fragmento en un fragmento sin fragmentActivity, sabes ? O tal vez usted tiene sus razones para hacerlo…
  6. 0

    Después de Leer algunos ejemplos, no puedes tener un FragmentActivity dentro de un fragmentActivity.
    No es necesario tener dos fragmentos y esta debe ser una FragmentPageAdapter… solo necesito hacer esto.

    <android.support.v4.view.ViewPager
    android:id="@+id/pager"
    android:layout_width="match_parent"
    android:layout_height="0px"
    android:layout_weight="1" >
    </android.support.v4.view.ViewPager>
    <LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_weight="0"
    android:gravity="center"
    android:measureWithLargestChild="true"
    android:orientation="horizontal" >
    <Button
    android:id="@+id/first"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="First" >
    </Button>
    <Button
    android:id="@+id/last"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Last" >
    </Button>
    </LinearLayout>

    Fuente:
    http://www.truiton.com/2013/05/android-fragmentpageradapter-example/

Dejar respuesta

Please enter your comment!
Please enter your name here