Android TabLayout inside Fragment

前端 未结 6 1397
爱一瞬间的悲伤
爱一瞬间的悲伤 2020-12-02 12:57

I am using Navigation Drawer to navigate between fragments they all use the MainActivity toolbar but each fragment has it\'s own TabLayout with 3 t

6条回答
  •  执念已碎
    2020-12-02 13:18

    After looking into yours code, I found that you forget to return a fragment in getItem method of PagerAdapter that you overrided from the FragmentStatePagerAdapter and there is no break statement in each case due to which every time a null value was returned.

    To doing so you need to create a another new fragment for each page in ViewPager or you can create one new fragment that could use in all page of ViewPager.

    You can't use the same recyclerview into the tabs of view pager that you have defined in parent fragment.

    activity_fragment_one.xml

     
    
        
    
            
    
        
    
        
    
    

    I have fixed your fragment and created a new Fragment that you can use in ViewPager Pages.

    public class NewFragment extends Fragment {
    
    private RecyclerView mRecyclerView;
    
    
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.activity_fragment_one, container, false);
        TabLayout tabLayout = (TabLayout) view.findViewById(R.id.tabs);
        tabLayout.addTab(tabLayout.newTab().setText("A"));
        tabLayout.addTab(tabLayout.newTab().setText("B"));
        tabLayout.addTab(tabLayout.newTab().setText("C"));
        final ViewPager viewPager = (ViewPager) view.findViewById(R.id.viewpager);
       // mRecyclerView = (RecyclerView) view.findViewById(R.id.recycler_view);
        LinearLayoutManager mLayoutManager = new LinearLayoutManager(getActivity());
        mLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);
        //mRecyclerView.setLayoutManager(mLayoutManager);
        viewPager.setAdapter(new PagerAdapter(getFragmentManager(), tabLayout.getTabCount()));
        viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout));
        tabLayout.setupWithViewPager(viewPager);
        tabLayout.setTabMode(TabLayout.MODE_SCROLLABLE);
        tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
    
            @Override
            public void onTabSelected(TabLayout.Tab tab) {
                viewPager.setCurrentItem(tab.getPosition());
            }
    
            @Override
            public void onTabUnselected(TabLayout.Tab tab) {
    
            }
    
            @Override
            public void onTabReselected(TabLayout.Tab tab) {
    
            }
        });
    
        return view;
    }
    
    public class PagerAdapter extends FragmentStatePagerAdapter {
        int mNumOfTabs;
    
        public PagerAdapter(FragmentManager fm, int NumOfTabs) {
            super(fm);
            this.mNumOfTabs = NumOfTabs;
        }
    
    
        @Override
        public Fragment getItem(int position) {
    
            switch (position) {
                case 0:
                  return new FragmentTab();
                case 1:
                    return new FragmentTab();
                case 2:
                    return new FragmentTab();
    
                default:
                    return null;
            }
        }
    
        @Override
        public int getCount() {
            return mNumOfTabs;
        }
    }
    }
    

    FragmentTab for each Page in View Pager (or you can create different fragment for each page according to yours need).

    public class FragmentTab extends Fragment {
    RecyclerView mRecyclerView;
    
    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_tab, container, false);
    
        mRecyclerView = (RecyclerView) view.findViewById(R.id.recycler_view);
        LinearLayoutManager mLayoutManager = new LinearLayoutManager(getActivity());
        mLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);
        mRecyclerView.setLayoutManager(mLayoutManager);
        RecyclerView.Adapter mAdapter = new AdapterOne();
        mRecyclerView.setAdapter(mAdapter);
        return view;
    }
    }
    

    fragment_tab.xml

    
    
        
    
    
    
    

提交回复
热议问题