TabLayout+ViewPager+Fragment的使用及重复onCreateView问题解决
使用TabLayout+ViewPager进行切换现在貌似已经成了很多app的标配,但是最近使用过程中发现有一个问题
如果从页面1点击切换到页面3,然后切换回页面1时,页面1会重新创建,此时会重复调用onCreateView
解决办法:
设置缓存页面数
1 | mContentVp.setOffscreenPageLimit(4); |
其中,mContentVp即为ViewPager变量
viewPager.setOffscreenPageLimit(int limit) 能够有效地一次性缓存多个Fragment,这样就能够解决在之后每次切换时不会创建实例对象,看起来也会流畅。但是这样的做法,最大的缺点就是容易造成第一次启动时非常缓慢!如果第一次启动时间满足要求的话,可以试试这种简单的办法。
TabLayout+ViewPager,默认首选项设置select()无效
由于使用了自定义布局,所以应该操作如下:
1 | mTabLayout.getTabAt(i).getCustomView().setSelected(true); |
Tablayout之Tab宽度左右无法填充
前段时间做一个项目使用到了Tablayout,可以用来实现类似知乎分栏的效果要使用Tablayout,必须引用Google的Android Support Design库,使用Android Studio 的同学可以直接使用只要在build.gradle中加入
1 | compile 'com.android.support:design:22.2.0' |
即可
遇到的问题
使用中,我需要设置Tab的点击效果,所以我新建了一个selector,并将每一个tab的界面背景设置为该selector
1 | itemTab.setCustomView(R.layout.item_tab_layout_custom); |
解决办法
百度了两天后,还是没有解决该问题,直到第三天,我的科学上网工具又好了- -感动到晕厥(事实证明,程序员真的不适合用百度,生活服务还好)
我google到了下面一篇文章,其中讲到了:
如果你设置了TabMode为MODE_FIXED然后发现文本并没有包围全局,或许是因为Tablayout在创建时应用了一些嵌入设置,你可以将下面的代码写入xml以解决此问题:
1 | app:tabPaddingStart="-1dp" |
由此可见,问题完美解决
总结
经过了这一次的问题,越发觉得程序员学会科学上网是多么重要,也增加了自己查询解决问题的能力,Tablayout作为谷歌推出的遵循MD的控件,应该多加学习利用。