android - 未以编程方式选择带有 ViewPager 的 TabLayout
问题描述
我已经Tabs
设置了ViewPager
。如果我在应用程序中选择选项卡或通过滑动页面,它将触发onTabSelected()
,但如果我以编程方式选择第一个选项卡,则不会触发此功能。我需要以编程方式设置它,因为我想按选项卡位置设置按钮可见性(如果选择了第一个选项卡,则某些按钮不可见)。
pagerAdapter = CustomViewPagerAdapter(pageList)
viewPager.adapter = pagerAdapter
tabLayout.setupWithViewPager(viewPager)
tabLayout.addOnTabSelectedListener(object: TabLayout.ViewPagerOnTabSelectedListener(viewPager){
override fun onTabReselected(tab: TabLayout.Tab?) {}
override fun onTabUnselected(tab: TabLayout.Tab?) {}
override fun onTabSelected(tab: TabLayout.Tab?) {
App.log("btnVisibility: onSelected")
setButtonsVisibility()
}
})
viewPager.currentItem = 0
//TRIED THIS ONE TOO - NOT WORKING
tabLayout.getTabAt(0)?.select()
更新:
找到的解决方案:tabLayout.setupWithViewPager(viewPager)
必须在所有选项卡/页面更改后调用。如果您之前调用它,viewPager.currentItem = 0
否则tabLayout.getTabAt(0)?.select()
这些行将不适用于您当前的tabLayout
or viewPager
。很奇怪。我认为它只是用来连接你的TabLayout
,而ViewPager
不是永久保存实际状态,以后不能更改ViewPager
。
解决方案
推荐阅读
- javascript - REACTJS - 从在线构建导入 CKEditor 5
- c# - FromSqlInterpolated/FromSqlRaw 中的 LIKE 运算符不起作用,但流畅的 API 或 LINQ 表达式可以
- sql - 对包含 date 和 nvarchar(50) 的列使用聚集索引而不是非聚集索引
- nlp - 删除 NLTK 停用词
- php - 用PHP上传和显示图片
- spring-boot - 在 Spring Boot 日志记录控制台的开始/结束处需要方括号
- python - 计算空行和列
- servicestack - ServiceStack 结构化日志记录
- java - 如何显示来自另一个类的新 JPanel?
- google-apps-script - 调用 setValues() 时日期更改