I created the tabs by following this https://www.youtube.com/watch?v=zcnT-3F-9JA but in this tutorial the tabs are within an activity where as I need them within fragments something like nested fragments.
And for the fragment I have added the code in onCreateView
I'm getting an error while trying to create an instance of TrainSearchFragmentAdapter
which is another class that extends FragmentPagerAdapter
.
This is my main activity which is a nav drawer activity Screenshot of Nav Drawer
This is the fragment that opens on clicking a nav option Screenshot of the fragment with tabs
Here is my code for the parent fragment :
public class TrainSearchFragment
extends Fragment implements
TrainSearchTrainByNoFragment.OnFragmentInteractionListener,
TrainSearchSeatAvailabilityFragment.OnFragmentInteractionListener,
TrainSearchRouteFragment.OnFragmentInteractionListener {
public TrainSearchFragment() {
}
//...
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_train_search, container, false);
TabLayout tabLayout = (TabLayout)view.findViewById(R.id.fragment_train_search_tablayout);
tabLayout.addTab(tabLayout.newTab().setText("Train By No."));
tabLayout.addTab(tabLayout.newTab().setText("Seat Availability"));
tabLayout.addTab(tabLayout.newTab().setText("Route"));
tabLayout.setTabGravity(TabLayout.GRAVITY_FILL);
final ViewPager viewPager = (ViewPager)view.findViewById(R.id.fragment_train_search_viewpager);
final TrainSearchFragmentAdapter trainSearchFragmentAdapter = new TrainSearchFragmentAdapter(getFragmentManager());
viewPager.setAdapter(trainSearchFragmentAdapter);
viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout));
tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
@Override
public void onTabSelected(TabLayout.Tab tab) {
//getItem
viewPager.setCurrentItem(tab.getPosition());
}
@Override
public void onTabUnselected(TabLayout.Tab tab) {
}
@Override
public void onTabReselected(TabLayout.Tab tab) {
}
});
return view;
}
//...
}
I have also tried using getChildFragmentManager()
instead of getFragmentManager()
on internet in multiple places I found the use of getSupportFragmentManager()
but I found its depreciated now.
Here is my code for the Adapter fragment :
public class TrainSearchFragmentAdapter extends FragmentPagerAdapter {
int mNoOfTabs;
public TrainSearchFragmentAdapter(FragmentManager fm) {
super(fm);
this.mNoOfTabs = 3;
}
@Override
public Fragment getItem(int position) {
switch (position){
case 0:
TrainSearchTrainByNoFragment trainSearchTrainByNoFragment = new TrainSearchTrainByNoFragment();
return trainSearchTrainByNoFragment;
case 1:
TrainSearchSeatAvailabilityFragment trainSearchSeatAvailabilityFragment = new TrainSearchSeatAvailabilityFragment();
return trainSearchSeatAvailabilityFragment;
case 3:
TrainSearchRouteFragment trainSearchRouteFragment = new TrainSearchRouteFragment();
return trainSearchRouteFragment;
default:
return null;
}
}
@Override
public int getCount() {
return mNoOfTabs;
}
}