How to set a ViewPager inside a Fragment How to set a ViewPager inside a Fragment android android

How to set a ViewPager inside a Fragment


Starting in Android 4.2, there are nested fragments.http://developer.android.com/about/versions/android-4.2.html#NestedFragments The support library now also includes support for this for older Android versions.

So you can do something like this:

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

Full implementation available here: https://github.com/marcoRS/nested-fragments/tree/master/src/com/burnside/digital/nestedfragments


You must use getChildFragmentManager() instead of getSupportFragmentManager() to get the FragmentManger inside a Fragment.But you should not use FragmentStatePagerAdapter rather than FragmentPagerAdapter.


Just use getChildFragmentManager() instead of getSupportFragmentManager() inside Fragments.

Inside Fragments

new ViewPagerAdapter(getChildFragmentManager());

Inside Activity

new ViewPagerAdapter(getSupportFragmentManager());

Simple Code

fragment_sample.xml layout

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

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 class

// common adapter for all view pager in your project.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);    }}

Important Related Links