Odpowiedz

71

Począwszy od wersji Android 4.2, są zagnieżdżone fragmenty. http://developer.android.com/about/versions/android-4.2.html#NestedFragments Biblioteka obsługi zawiera teraz także obsługę tego dla starszych wersji Androida.

Więc można zrobić coś takiego:

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

Pełne wdrożenie dostępny tutaj: https://github.com/marcoRS/nested-fragments/tree/master/src/com/burnside/digital/nestedfragments

+0

Ale nie jest to możliwe, ponieważ nie mogę umieścić FragmentActivity wewnątrz mojego Fragmentu 2, ponieważ fragmentem macierzystym jest FragmentActivity, a dziecko (fragment 2) musi być fragmentactivity do mają tabulatory ... aw przykładzie Githuba nie umieszczaj fragmentu wewnątrz innego fragmentu. –

+0

Dlaczego potrzebujesz fragmentu 1? Nie możesz po prostu mieć podglądu, który odwołuje się do różnych fragmentów, a następnie ma Fragment 2 poniżej? –

+0

ale fragment 1 jest zawsze taki sam i wyglądałoby to jak zmiany, i nie chcesz tego .. jakiś pomysł? –

0

Z biblioteki Android Pomoc V4, można dodać fragment wewnątrz innego fragmentu. Spróbuj go użyć, może to rozwiązać Twój problem.

+1

Ale nie jest możliwe, ponieważ nie mogę umieścić FragmentActivity wewnątrz mojego fragment 2, ponieważ fragment rodzic jest FragmentActivity i dziecko (fragment 2) musi być fragmentaryczność, aby mieć zakładki .. jakiś pomysł? –

+0

Och, ale czekaj, możesz po prostu umieścić 2 fragmenty w fragmencie bez fragmentAktywności, wiesz? A może masz powody, by to zrobić ... –

0

Po przeczytaniu niektórych przykładach, nie można mieć FragmentActivity wewnątrz fragmentActivity. Nie jest konieczne posiadanie dwóch fragmentów i musi to być FragmentPageAdapter ... muszę to tylko zrobić.

<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> 

Źródło: http://www.truiton.com/2013/05/android-fragmentpageradapter-example/

18

Musisz użyć getChildFragmentManager() zamiast getSupportFragmentManager() uzyskać FragmentManger wewnątrz fragmentu. Ale nie powinieneś używać FragmentStatePagerAdapter zamiast FragmentPagerAdapter.

+0

Dzięki, pracuj dla mnie! –

1

jest to możliwe. spróbuj zrobić ten kod pliku view_pager_fragment.xml

<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); 
    } 
} 
Powiązane problemy