TabLayout與ViewPager結合時不顯示Tab標題

當咱們將TabLayout與ViewPager結合時,會出現Tab標題不顯示的問題.java

mTabLayout.setupWithViewPager(viewPager);

從源碼裏找答案.
先看下方法調用流程
圖片描述spa

大體流程如圖,這裏只給出populateFromPagerAdapter()方法源碼.code

void populateFromPagerAdapter() {
        removeAllTabs();

        if (mPagerAdapter != null) {
        //返回ViewPager設置的PagerAdapter.getCount()
            final int adapterCount = mPagerAdapter.getCount();
            for (int i = 0; i < adapterCount; i++) {
            //從新添加,並經過PagerAdapter.getPageTitle()爲tab設置標題
                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();.圖片

/**
     * Remove all tabs from the action bar and deselect the current tab.
     */
    public void removeAllTabs() {
        // Remove all the views
        for (int i = mTabStrip.getChildCount() - 1; i >= 0; i--) {
            removeTabViewAt(i);
        }

        for (final Iterator<Tab> i = mTabs.iterator(); i.hasNext();) {
            final Tab tab = i.next();
            i.remove();
            tab.reset();
            sTabPool.release(tab);
        }

        mSelectedTab = null;
    }

移除了TabLayout添加的tab.
下一步final int adapterCount = mPagerAdapter.getCount();則是返回你設置給ViewPager的PagerAdapter的getCount()返回值.ip

而後在for循環中 addTab(newTab().setText(mPagerAdapter.getPageTitle(i)), 添加新的tab,並將PagerAdapter.getPageTitle()返回值設置爲tab的標題.rem

所以,當ViewPagerTabLayout結合使用時,沒必要給TabLayout添加tab,也就是不用調用TabLayout.addTab().只須要重寫PagerAdapter.getPageTitle()方法便可.get

相關文章
相關標籤/搜索