TabLayout.Tab获取TabItem配置id返回-1的问题咨询
核心原因
TabItem仅作为XML中的占位声明存在,不是运行时挂载到视图树的实际View。你在XML里给TabItem配置的android:id是继承自View的通用属性,因此Android Studio不会提示语法错误,但TabLayout解析XML生成运行时的Tab实例时,根本不会读取这个id字段,所以调用Tab.getId()只会返回默认值-1。
靠文本比对识别Tab的方案缺陷很明显:后续做多语言适配、文案调整时会直接触发逻辑异常,不推荐使用。
推荐实现方案
方案1:绑定tag做标识(侵入性最低)
初始化TabLayout后,给每个Tab手动绑定对应id作为tag,后续直接读取tag判断即可,索引和XML中TabItem的书写顺序一一对应:
// 初始化阶段完成tag绑定 tabs.getTabAt(0)?.tag = R.id.firstTab tabs.getTabAt(1)?.tag = R.id.secondTab // 其余Tab按顺序绑定即可 // 选中判断逻辑 when (tabs.getTabAt(tabs.selectedTabPosition)?.tag) { R.id.firstTab -> { // 第一个Tab对应的业务逻辑 } R.id.secondTab -> { // 第二个Tab对应的业务逻辑 } }
方案2:直接用索引判断
如果Tab和ViewPager/ViewPager2联动,Tab的索引和页面顺序是强绑定的,直接用选中位置判断逻辑更简洁:
when (tabs.selectedTabPosition) { 0 -> { /* 第一个Tab逻辑 */ } 1 -> { /* 第二个Tab逻辑 */ } }
方案3:自定义Tab视图时挂载id
如果为Tab设置了自定义布局,可以在加载自定义View时,把对应id设置给自定义View的根节点,后续通过tab.customView?.id获取判断即可。
内容的提问来源于stack exchange,提问作者user1785730
相关产品推荐
相关产品推荐

