TabLayout使用setupWithViewPager()方法绑定Viewpager后不显示文字

开始本人打算使用Metrial design风格设计做毕业设计的

本来打算做成这个样子

145905_HW8p_2447831.jpg

然后就开始兴冲冲的写起了代码,

先写布局文件,嗯,没有问题,预览效果不错

145905_ucsD_2447831.png

然后去查阅api看看怎么用

TabLayout tabLayout = ...;
 tabLayout.addTab(tabLayout.newTab().setText("Tab 1"));
 tabLayout.addTab(tabLayout.newTab().setText("Tab 2"));
 tabLayout.addTab(tabLayout.newTab().setText("Tab 3"));

文档上这么写,我也这么写,写完之后创建一个Viewpager+Adapter+TabLayout

145904_gEfk_2447831.png

使用官方推荐的setupWithViewPager()方法绑定(话说我原来封装过一个绑定Viewpager和自定义Tab的工具包,我以为官方对于绑定的处理有我一样贴心,后来发现我错了)


。。。。。。


显示出来的结果是这样的



145903_1Amz_2447831.jpg


。。。。。。。


卧槽,我的字呢


。。。是不是颜色不对


。。。是不是字号不对


我好想意识到了问题出在哪!

于是我注释掉了这行代码


145904_ABsG_2447831.png

。。。。

145905_HW8p_2447831.jpg

果然。。。。虽然失去了联动效果,但是字出来了

。。。。。

我不甘心

。。。。。继续注释

。。。。。。。


145905_rKtD_2447831.png

结果是这个样子的。。。我把设置tab的方法注释了,为毛线还有tab呢(下面的下划线明显地指明了有四个tab)

145903_1Amz_2447831.jpg

。。。

突然,好像意识到了哪里不对。。。


145905_lo1Q_2447831.png

145905_fC6i_2447831.jpg

好了,卧槽。。。。好了。。。

然后我瞅了瞅源码

不截图了,直接贴源码

public void setupWithViewPager(@NonNull ViewPager viewPager) {
    final PagerAdapter adapter = viewPager.getAdapter();
    if (adapter == null) {
        throw new IllegalArgumentException("ViewPager does not have a PagerAdapter set");
    }

    // First we'll add Tabs, using the adapter's page titles
    setTabsFromPagerAdapter(adapter);

    // Now we'll add our page change listener to the ViewPager
    viewPager.addOnPageChangeListener(new TabLayoutOnPageChangeListener(this));

    // Now we'll add a tab selected listener to set ViewPager's current item
    setOnTabSelectedListener(new ViewPagerOnTabSelectedListener(viewPager));

    // Make sure we reflect the currently set ViewPager item
    if (adapter.getCount() > 0) {
        final int curItem = viewPager.getCurrentItem();
        if (getSelectedTabPosition() != curItem) {
            selectTab(getTabAt(curItem));
        }
    }
}

看到源码的第一反应是,貌似没什么问题吧,先检查以下Viewpager有没有正确的设置适配器,没有设置则抛异常。。然后。。。。。

// First we'll add Tabs, using the adapter's page titles
    setTabsFromPagerAdapter(adapter);

咦。。。卧槽。。。这货是啥,好奇的我点了进去

public void setTabsFromPagerAdapter(@NonNull PagerAdapter adapter) {
    removeAllTabs();
    for (int i = 0, count = adapter.getCount(); i < count; i++) {
        addTab(newTab().setText(adapter.getPageTitle(i)));
    }
}

瞬间一万头神兽从我脑海里奔驰而过。。。。

谁允许你清空了,谁让你new新Tab啦。。。。。

这思路还没有我年少无知时候封装的代码人性化呢好吧(见我分享的代码,我再次基础上封装了新的代码,新代码没有上传)

而且注释里也并没有说这货会removedAllTab();

/**
 * The one-stop shop for setting up this {@link TabLayout} with a {@link ViewPager}.
 *
 * <p>This method will:
 * <ul>
 *     <li>Add a {@link ViewPager.OnPageChangeListener} that will forward events to
 *     this TabLayout.</li>
 *     <li>Populate the TabLayout's tabs from the ViewPager's {@link PagerAdapter}.</li>
 *     <li>Set our {@link TabLayout.OnTabSelectedListener} which will forward
 *     selected events to the ViewPager</li>
 * </ul>
 * </p>
 *
 * @see #setTabsFromPagerAdapter(PagerAdapter)
 * @see TabLayoutOnPageChangeListener
 * @see ViewPagerOnTabSelectedListener
 */


转载于:https://my.oschina.net/oschenxiaomo/blog/649239

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值