0

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

0 Answers0