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设置模式?固定:滑动
    <android.support.design.widget.TabLayout
        android:id="@+id/tabLayout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:tabMode="scrollable" />
     <!--
        一大堆子属性
        app:tabIndicatorColor    指示器颜色
        app:tabTextColor         tab栏字体颜色
        app:tabSelectedTextColor tab栏字体被选颜色
        app:tabIndicatorHeight   指示器高度
        app:tabBackground        tab背景颜色
        app:tabMaxWidth          tab栏最大宽度
        app:tabTextAppearance    tab栏字体样式
        app:tabMinWidth          tab栏最小宽度
        ......
    -->

    <android.support.v4.view.ViewPager
        android:id="@+id/pager"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"/>

                /**
                 * 先找控件
                 */
                //添加标题
                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<Fragment> fragments;

    public MainPagerAdapter(FragmentManager childFragmentManager, String[] tabs, ArrayList<Fragment> 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];
    }
}

猜你喜欢

转载自blog.csdn.net/weixin_43917449/article/details/86287142