TabLayout的一些使用

来源:互联网 发布:计算机恶意软件 编辑:程序博客网 时间:2024/05/29 10:29
setupWithViewPager()的一些坑

在使用setupWithViewPager()进行TabLayout与ViewPager进行绑定时,虽然TabLayout还可以点击,但是原来设置的tab不见了,这可真是奇了怪了,看看TabLayout源码,这个方法到底干了什么。

直接进入根源

    setPagerAdapter()的populateFromPagerAdapter()方法:    void populateFromPagerAdapter() {        removeAllTabs();        if (mPagerAdapter != null) {            final int adapterCount = mPagerAdapter.getCount();            for (int i = 0; i < adapterCount; i++) {                addTab(newTab().setText(mPagerAdapter.getPageTitle(i)), false);            }            // Make sure we reflect the currently set ViewPager item            if (mViewPager != null && adapterCount > 0) {                final int curItem = mViewPager.getCurrentItem();                if (curItem != getSelectedTabPosition() && curItem < getTabCount()) {                    selectTab(getTabAt(curItem));                }            }        }    }

这里可以看到removeAllTabs()方法的作用就是清除原来设置的tab,这个方法太霸道了,二话不说你原来设置的直接咔嚓掉。它自己创建新的tab,用PagerAdapter.getPageTitle()方法为tab设置上内容。

所以如果你是纯文本的的tab这样绑定ViewPager是比较好的,只需要重写好PagerAdapter的getPageTitle()方法就好,但你是有其他样式的话就需要在setupWithViewPager()后,拿到TabLayout的TabItem重新构造成你想要的样子,如下:

tabLayout.setupWithViewPager(vp);for (int i = 0; i < tabLayout.getTabCount(); i++) {     TabLayout.Tab itemTab = tabLayout.getTabAt(i);     if (itemTab != null) {         itemTab.setText("hahah");         itemTab.setIcon(R.drawable.selector_tab);       }    }
原创粉丝点击