Android Studio移除或隐藏视频应用Live标签按钮的方法
解决方案
你删不掉Live标签的核心原因是代码里硬编码了标签总数为5,ViewPager适配器的getCount()返回的是这个硬编码值,不管你怎么改布局或者判断逻辑,只要总数没改,适配器就会一直预留第5个标签位,最后默认加载Live对应的Fragment和标题。
方案一:永久删除Live标签
直接改3处代码即可:
- 把类里硬编码的标签总数从5改成4:
// 原代码 public int tab_count = 5; // 修改为 public int tab_count = 4;
- 修改适配器的
getItem()方法,移除Live分支:
@NonNull @Override public Fragment getItem(int position) { if (position == 0) { return Fragmentvideo.newInstance(ORDER_RECENT, FILTER_video); } else if (position == 1) { return Fragmentvideo.newInstance(ORDER_FEATURED, FILTER_video); } else if (position == 2) { return Fragmentvideo.newInstance(ORDER_POPULAR, FILTER_video); } else { return Fragmentvideo.newInstance(ORDER_RANDOM, FILTER_video); } }
- 修改适配器的
getPageTitle()方法,移除Live标题分支:
@Override public String getPageTitle(int position) { if (position == 0) { return getResources().getString(R.string.menu_recent); } else if (position == 1) { return getResources().getString(R.string.menu_featured); } else if (position == 2) { return getResources().getString(R.string.menu_popular); } else { return getResources().getString(R.string.menu_random); } }
改完直接编译运行,Live标签就会彻底消失。代码顶部没用到的FILTER_LIVE、ORDER_LIVE静态导入可以删掉,不删也不会影响功能。
方案二:保留代码按需隐藏(后续可随时恢复)
如果不想直接删代码,想留着以后需要的时候再开Live功能,可以加个全局开关控制:
- 在
Config类里加控制开关:
// 设为false隐藏Live标签,设为true即可恢复显示 public static final boolean ENABLE_LIVE_TAB = false;
- 把硬编码的tab_count改成动态计算:
public int tab_count = Config.ENABLE_LIVE_TAB ? 5 : 4;
- 修改
getItem()方法,加开关判断:
@NonNull @Override public Fragment getItem(int position) { if (position == 0) { return Fragmentvideo.newInstance(ORDER_RECENT, FILTER_video); } else if (position == 1) { return Fragmentvideo.newInstance(ORDER_FEATURED, FILTER_video); } else if (position == 2) { return Fragmentvideo.newInstance(ORDER_POPULAR, FILTER_video); } else if (position == 3) { return Fragmentvideo.newInstance(ORDER_RANDOM, FILTER_video); } else if (Config.ENABLE_LIVE_TAB && position == 4) { return Fragmentvideo.newInstance(ORDER_LIVE, FILTER_LIVE); } // 兜底返回,避免索引越界崩溃 return Fragmentvideo.newInstance(ORDER_RECENT, FILTER_video); }
- 同步修改
getPageTitle()方法:
@Override public String getPageTitle(int position) { if (position == 0) { return getResources().getString(R.string.menu_recent); } else if (position == 1) { return getResources().getString(R.string.menu_featured); } else if (position == 2) { return getResources().getString(R.string.menu_popular); } else if (position == 3) { return getResources().getString(R.string.menu_random); } else if (Config.ENABLE_LIVE_TAB && position == 4) { return getResources().getString(R.string.menu_live); } return getResources().getString(R.string.menu_recent); }
注意:别用直接给TabLayout的对应tab设置
View.GONE的方式隐藏,这种方式不会修改ViewPager的索引,会导致滑动错位、页面预加载异常、点击无响应等问题,从适配器层面控制条目数量是最稳定的实现方式。
内容的提问来源于stack exchange,提问作者reinan paz
相关产品推荐
相关产品推荐

