网上很多反应使用TabLayout 的 setupWithViewPager 踩的坑 (我承认我也踩了),废话少说,直接总结我的血泪史。
TabLayout + ViewPager 可以有两种使用方式 :
采用 setupWithViewPager 方法 ,正确姿势应该是重写PagerAdapter 的 getPageTitle(int position) 方法PRivate void initPager() { fragmentList = new ArrayList<>(); Collections.addAll(tabTitleList, tabTitle); for (int i = 0; i < tabTitle.length; i++) { CardFragment fragment = new CardFragment(); fragmentList.add(fragment); } adapter = new CardPagerAdapter(getSupportFragmentManager(), fragmentList,tabTitleList); mViewPager.setAdapter(adapter); //将TabLayout和ViewPager关联起来。 此处 有坑!!setupWithViewPager 会 removeAllTabs(),之前add的tab 文字不显示的原因 mTabLayout.setupWithViewPager(mViewPager); // //设置可以滑动 mTabLayout.setTabMode(TabLayout.MODE_SCROLLABLE);}CardPagerAdapter 代码
public class CardPagerAdapter extends FragmentStatePagerAdapter { private List<Fragment> data; private ArrayList<String> tabTitleList = new ArrayList<String>(); public CardPagerAdapter(FragmentManager fm, List<Fragment> data, ArrayList<String> tabTitleList ) { super(fm); this.data = data; this.tabTitleList=tabTitleList; } @Override public Fragment getItem(int position) { return data == null ? null : data.get(position); } @Override public int getCount() { return data == null ? 0 : data.size(); } @Override public CharSequence getPageTitle(int position) { return tabTitleList.get(position); }}不采用 setupWithViewPager 方法 ,不需要重写 PagerAdapter 的 getPageTitle 方法private void initPager() { mTabLayout.addTab(mTabLayout.newTab().setText("A")); mTabLayout.addTab(mTabLayout.newTab().setText("B")); mTabLayout.addTab(mTabLayout.newTab().setText("C")); mTabLayout.addTab(mTabLayout.newTab().setText("D")); mTabLayout.addTab(mTabLayout.newTab().setText("E")); mTabLayout.addTab(mTabLayout.newTab().setText("F")); fragmentList = new ArrayList<>(); Collections.addAll(tabTitleList, tabTitle); for (int i = 0; i < mTabLayout.getTabCount(); i++) { CardFragment fragment = new CardFragment(); fragmentList.add(fragment); } adapter = new CardPagerAdapter(getSupportFragmentManager(), fragmentList,tabTitleList); mViewPager.setAdapter(adapter); mTabLayout.setOnTabSelectedListener(new TabLayout.ViewPagerOnTabSelectedListener(mViewPager)); mViewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(mTabLayout)); //设置可以滑动 mTabLayout.setTabMode(TabLayout.MODE_SCROLLABLE); }OK, 可以参考 仿CSDN客户端首页(一)—-TabLayout实现选项卡滑动效果
新闻热点
疑难解答