Android之TabLayout常见问题解决+TabLayout+ViewPager实现标签页面联动

TabLayout一般不报错还没效果,那就先检查下面这几项是否使用了。。。

TabLayout使用:

首先导入依赖:implementation 'com.android.support:design:28.0.0'

设置模式:setTabMode(TabLayout.MODE_SCROLLABLE)或在控件设置;

关联:tabLayout.setupWithViewPager(pager);

适配器重写:getPageTitle(int position)方法

这里写图片描述在大佬这借个效果图https://blog.csdn.net/Bu_siliang/article/details/80506070

  • 下面是布局的写法:(注意tabMode设置模式?固定:滑动
    
     

    

  • 标签自定义模拟数据,我是根据标签的页数创建的Fragment,加载到ViewPager中
  • 静态工厂创建Fragmenthttps://blog.csdn.net/weixin_43917449/article/details/86176623
                /**
                 * 先找控件
                 */
                //添加标题
                String  tabs = new String[]{"tab1,tab2,tab3,tab4,tab5,tab6"};
                for (int i = 0; i < tabs.length; i++) {
                    //循环添加标签
                    tabLayout.addTab(tabLayout.newTab().setText(tabs[i]));
                    //循环创建fragment
                    fragments.add(ChildFragment.newInstance(i));
                }
                //适配器
                MainPagerAdapter adapter = new MainPagerAdapter(getChildFragmentManager(), tabs, fragments);
                pager.setAdapter(adapter);

                //tablayout关联Viewpager
                tabLayout.setupWithViewPager(pager);
  • Fragment利用的事动态创建,需要创建静态工厂,最后放置viewpager,这个方法写在上面代码下面即可;
 //静态工厂
    public static MainFragment newInstance(int index) {
        MainFragment mainFragment = new MainFragment();
        Bundle args = new Bundle();
        args.putInt("index", index);
        mainFragment.setArguments(args);

        return mainFragment;
    }

Step:适配器写法:

 在适配器里面就是集成FragmentPageAdapter,切记传入getSupportFragmentManager();因为我的是继承父类
Fragment所以要拿到他的子类,要自主重写 getPageTitle(int position)方法,不然不展示标题;

public class MainPagerAdapter extends FragmentPagerAdapter {
    private String[] tabs;
    private ArrayList fragments;

    public MainPagerAdapter(FragmentManager childFragmentManager, String[] tabs, ArrayList fragments) {
        super(childFragmentManager);
        this.tabs = tabs;
        this.fragments = fragments;
    }

    /**
     * 获取每一个Fragment的页面
     * @param i
     * @return
     */
    @Override
    public Fragment getItem(int i) {
        return fragments.get(i);
    }

    /**
     * 标签数量-->也就是ViewPager内的Fragment页数
     *
     * @return
     */
    @Override
    public int getCount() {
        return fragments.size();
    }

    /**
     * 内置代码:获取每一个标签页--->赋值
     *
     * @param position
     * @return
     */
    @Nullable
    @Override
    public CharSequence getPageTitle(int position) {
        return tabs[position];
    }
}

 

 

你可能感兴趣的:(Android)