TabLayout不正常显示标签->TabLayout和ViewPager的恩恩怨怨
2016-11-04 10:05
531 查看
问题
近日用了下android.support.design.widget.TabLayout和ViewPager发现标签不显示tabLayout = (TabLayout) findViewById(R.id.tl_recharge); tabLayout.addTab(tabLayout.newTab().setText("账户充值")); tabLayout.addTab(tabLayout.newTab().setText("卡卷充值")); tabLayout.setupWithViewPager(viewPager);
解决方案
@Overridepublic CharSequence getPageTitle(int position) {
return tableTitle[position];
}
删除addTab 直接在getPageTitle返回名字即可
TabLayout的代码就这样。发现无法显示,这种奇怪的问题我的解决办法是,逐行注释找问题
发现是setupWithViewPager导致问题,我把setupWithViewPager的代码注释后,发现可以正常显示标签了
但是滑动后标签不会有任何变动
我们来看看setupWithViewPager中做了什么
private void setupWithViewPager(@Nullable final ViewPager viewPager, boolean autoRefresh, boolean implicitSetup) { if (mViewPager != null) { // If we've already been setup with a ViewPager, remove us from it if (mPageChangeListener != null) { mViewPager.removeOnPageChangeListener(mPageChangeListener); } if (mAdapterChangeListener != null) { mViewPager.removeOnAdapterChangeListener(mAdapterChangeListener); } } if (mCurrentVpSelectedListener != null) { // If we already have a tab selected listener for the ViewPager, remove it removeOnTabSelectedListener(mCurrentVpSelectedListener); mCurrentVpSelectedListener = null; } if (viewPager != null) { mViewPager = viewPager; // Add our custom OnPageChangeListener to the ViewPager if (mPageChangeListener == null) { mPageChangeListener = new TabLayoutOnPageChangeListener(this); } mPageChangeListener.reset(); viewPager.addOnPageChangeListener(mPageChangeListener); // Now we'll add a tab selected listener to set ViewPager's current item mCurrentVpSelectedListener = new ViewPagerOnTabSelectedListener(viewPager); addOnTabSelectedListener(mCurrentVpSelectedListener); final PagerAdapter adapter = viewPager.getAdapter(); if (adapter != null) { // Now we'll populate ourselves from the pager adapter, adding an observer if // autoRefresh is enabled setPagerAdapter(adapter, autoRefresh); } // Add a listener so that we're notified of any adapter changes if (mAdapterChangeListener == null) { mAdapterChangeListener = new AdapterChangeListener(); } mAdapterChangeListener.setAutoRefresh(autoRefresh); viewPager.addOnAdapterChangeListener(mAdapterChangeListener); // Now update the scroll position to match the ViewPager's current item setScrollPosition(viewPager.getCurrentItem(), 0f, true); } else { // We've been given a null ViewPager so we need to clear out the internal state, // listeners and observers mViewPager = null; setPagerAdapter(null, false); } mSetupViewPagerImplicitly = implicitSetup; }代码基本无问题,最后走到setPagerAdapter中,继续追踪setPagerAdapter
private void setPagerAdapter(@Nullable final PagerAdapter adapter, final boolean addObserver) { if (mPagerAdapter != null && mPagerAdapterObserver != null) { // If we already have a PagerAdapter, unregister our observer mPagerAdapter.unregisterDataSetObserver(mPagerAdapterObserver); } mPagerAdapter = adapter; if (addObserver && adapter != null) { // Register our observer on the new adapter if (mPagerAdapterObserver == null) { mPagerAdapterObserver = new PagerAdapterObserver(); } adapter.registerDataSetObserver(mPagerAdapterObserver); } // Finally make sure we reflect the new adapter populateFromPagerAdapter(); }
发现也无问题,最后转到populateFromPagerAdapter
private 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)); } } } }
问题就出在这里,也就是说调用setupWithViewPager后会删除所有的tab
并且使用viewpage的adapter,自动设置tab为viewpage.getPageTitle()的字符而getPageTitle默认实现返回的是null
所以会出现不现实标签的情况
那这就好办了。也就是说TabLayout和ViewPage使用的时候不用设置tab,直接重写ViewPager的getPageTitle来设置标签的显示
相关文章推荐
- 标签栏TabLayout与ViewPager的那些事
- 解决TabLayout+viewpager 滑动切换时 布局文件不是从头显示
- fragment viewpager和tablayout相互嵌套内容不显示和组件不显示问题
- TabLayout + ViewPager实现标签栏效果
- tablayout + viewpager + fragment 实现标签,并且部分fragment里面嵌套viewpager+fragment
- 使用TabLayout和ViewPager实现顶部标签页
- ViewPager+TabLayout注意(版本号问题跟不显示Tab的原因)
- TabLayout关联ViewPager后不显示文字的解决方法
- TabLayout关联ViewPager后不显示文字
- Tablayout和ViewPager的结合使用及滑动RecycleView隐藏显示Toolbar和右下角的悬浮窗
- TabLayout下ViewPager显示Json解析数据
- TabLayout+ViewPager实现标签卡效果
- TabLayout使用setupWithViewPager()方法绑定Viewpager后不显示文字
- 完美解决Google最新的Design:TabLayout结合ViewPager无法显示Icon的问题
- Tablayout与ViewPager联动时不显示Tablayout上面的标题
- Tablayout + Viewpager + Fragment 联动显示
- 关于TabLayout和ViewPager联动不显示文字
- TabLayout与ViewPager同步后Tab的标题不显示
- TabLayout 与ViewPager 搭配tab内容不显示问题
- ViewPager 、TabLayout和Fragment实现标签滑动