使用Tablayout出现标题消失的原因:setupWithViewPager()的大坑
TabLayout使用addTab方法添加标题,调用setupWithViewPager方法绑定ViewPager
tabLayout.addTab(tabLayout.newTab().setText("全部"));
tabLayout.addTab(tabLayout.newTab().setText("Ping²it"));
tabLayout.addTab(tabLayout.newTab().setText("同款"));
allArtPager.setAdapter(new MyFragmentPagerAdapter(getSupportFragmentManager(),fragmentList));
allArtPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout));
allArtPager.setCurrentItem(articleClass);
tabLayout.setupWithViewPager(allArtPager);
这时候添加的标题却不显示了
查看TabLayout封装的setupWithViewPager方法的源码。

removeAllTabs();它竟然把之前添加的title全部被清空,自己又new新的title,所以我们之前添加的标题都不见了。
对于这个问题我有两种解决办法:
方法一:可以执行完setupWithViewPager()后,再添加标题,
tabLayout.setupWithViewPager(allArtPager);
       tabLayout.getTabAt(0).setText("全部");
       tabLayout.getTabAt(1).setText("Ping²it");
       tabLayout.getTabAt(2).setText("同款");
       
方法二:查看源码,TabLayout执行完removeAllTabs后,new新的Tabs,它调用的PagerAdapter中的方法getPageTitle();所以我们可以在PagerAdapter中添加Titles

public class MyFragmentPagerAdapter extends FragmentPagerAdapter {
    private ArrayList<Fragment> fragments;
    private String[] titles = new String[]{"全部", "Ping²it", "同款", "尖儿货", "场景","BRAND", "态度", "MESSAGE"};
    public MyFragmentPagerAdapter(FragmentManager fragmentManager, ArrayList<Fragment> fragments) {
        super(fragmentManager);
        this.fragments=fragments;
    }
    @Override
    public Fragment getItem(int position) {
        return fragments.get(position);
    }
    @Override
    public int getCount() {
        return fragments.size();
    }
    @Override
    public CharSequence getPageTitle(int position) {
        return titles[position];
    }
}
个人感觉还是第二种方法方便实用,Tablayout源码中使用removeAllTabs,又调用PagerAdapter的getPageTitle()方法,本身就是想在PagerAdapter中获取title。
使用Tablayout出现标题消失的原因:setupWithViewPager()的大坑的更多相关文章
- Android Studio 项目代码全部消失--出现原因及解决方法
		
出现原因,自己把项目地址父层目录文件名修改了,导致原来打开的项目位置不对,代码全部消失.这样就只要关闭项目,打开一下你修改路径下的项目即可.因为原来的项目还在原来的路径下寻找,但是原来的路径发生了改变
 - jq点击事件不生效,效果只闪现一次又立马消失的原因?
		
出现的问题:jq点击事件不生效,点击的时候效果实现但又立马消失,页面重新刷新了一次 可能出现的原因: a标签href属性的原因,虽然点击事件生效,但页面又刷新了一次,所以没有效果,只闪了一次 解决方案 ...
 - TabLayout+ViewPager 标题不显示问题
		
第一次用TabLayout+ViewPager 组合在布局中写好了三个标题预览没问题而且也设置了 app:tabIndicatorColor="@color/colorAccent" ...
 - div设置contenteditable="true" 光标消失:原因
		
原因1:document.onselectstart= function(){return false;}; 原因2:父层设置了user-select:none 导致 子层设置了 contentedi ...
 - 【原创】JAVA进程突然消失的原因?
		
引言 值此七夕佳节,烟哥放弃了无数妹纸的邀约,坐在电脑面前码字,就是为了给读者带来新的知识,这是一件伟大的事业! 好吧,实际情况是没人约.为了化解尴尬,我决定卖力写文章,嗯,一定是我过于屌丝! 好了, ...
 - pgadmin中的备份功能消失的原因和找回方法
		
pgadmin在正常情况下,在左侧的[对象浏览器]中选中数据库.模式或者表时,右键会出现[备份]和[恢复]的选项(除早期不支持该功能的版本外). 如: 当然,有时候有人会发现,当你想要用这些备份还原功 ...
 - MATLAB GUI程序设计中ListBox控件在运行期间消失的原因及解决方法
		
在运行期间,ListBox控件突然消失,同时给出如下错误提示: Warning: single-selection listbox control requires that Value be an ...
 - RNN神经网络产生梯度消失和梯度爆炸的原因及解决方案
		
1.RNN模型结构 循环神经网络RNN(Recurrent Neural Network)会记忆之前的信息,并利用之前的信息影响后面结点的输出.也就是说,循环神经网络的隐藏层之间的结点是有连接的,隐藏 ...
 - 【Android - MD】之TabLayout的使用
		
TabLayout是Android 5.0新特性--Material Design中的一个控件,是一个标签页的导航条,常结合ViewPager完成页面导航. 和其他MD控件一样,使用TabLayout ...
 - 【Android - 控件】之MD - TabLayout的使用
		
TabLayout是Android 5.0新特性——Material Design中的一个控件,是一个标签页的导航条,常结合ViewPager完成页面导航. 和其他MD控件一样,使用TabLayout ...
 
随机推荐
- java.sql.SQLException: Access denied for user ‘root‘@‘localhost‘ (using password: YES)问题
			
此报错大多数存在的问题为mysql密码错误,需要去JDBC文件中寻找url查看是否密码错误.
 - uni-app (uView) select下拉框添加模糊搜索
			
先看效果: 因为uniapp内置的下拉查询是没有输入模糊搜索的,有的列表选项过多时还是需要这个搜索功能,所以只能自己筛选 (前台.后台两种方法). 下面是代码: <template> &l ...
 - Android 添加shape, selector等资源文件
			
右键点击drawable文件夹,选择new -> Drawable Resource file 在弹出的New Resource file界面中,将Root element定义为shape,就可 ...
 - vue  基础 v-text v-html  v-model  v-cloak  v-bind
			
v-text 纯文本绑定 v-html 会解析html标签 <p v-html="rawHtml"></p> var a=new Vue({ el:&q ...
 - CodeGym自学笔记05——类名
			
1.Java 程序由类组成.每个类都存储在一个单独的文件中,其文件名称与类名一致.该文件的扩展名为 java. 2.当我们有许多类文件时,我们会将它们分组到文件夹和子文件夹中.此外,类还会被分组到包和 ...
 - mysql随机返回一条数据
			
select * from biz_question ORDER BY RAND(id) LIMIT 1; SELECT * FROM biz_question AS t1 JOIN (SELECT ...
 - XXE漏洞初步练手
			
0x00:XXE定义 xml外部实体注入被我们称为XXE.因为实体可以通过预定义在文档中被调用,而实体的标识符又可以访问本地或者远程内容,当允许引用外部实体时,攻击者便可以构造恶意内容来达到攻击.
 - Python条件语句和基本数据类型
			
1.if基本语句 if 条件: 内部代码块 else: ...... 2.if支持嵌套 if 1 == 1: if 2 == 2: print('走一步') else: print('走两步') el ...
 - springboot docker打包镜像
			
首先在idea中创建springboot项目,pom文件packaging 为jar ,然后编写接口. 编写Dockerfile 注意Dockerfile只能这样命名. 使用maven打包命令或者使用 ...
 - CCF 201909-2	小明种苹果(续)
			
#include <iostream> #include <bits/stdc++.h> #include <string> using namespace std ...