问题描述
我在MainActivity的AppBarLayout中有一个TabLayout,在TransactionsFragment中有aViewPager2。 我在使用TabLayout时遇到问题,如下所示:
当我从上一个活动返回MainActivity时, viewPager2设置为正确的页面,但是TabLayout不会滚动到选定的选项卡。
我尝试过
viewPager2.currentItem = xxx or
tabLayout.selectTab(tabLayout.getTabAt(xxx))
在TransactionsFragment中,但我没有滚动到突出显示的选项卡。您能告诉我代码有什么问题吗?谢谢。
TransactionFragment.kt
class TransactionsFragment : Fragment() {
lateinit var viewPagerAdapter: TabFragmentStateAdapter
private lateinit var tabLayout: TabLayout
private var pagerPos = -1
override fun onViewCreated(view: View,savedInstanceState: Bundle?) {
super.onViewCreated(view,savedInstanceState)
setUpViewPager()
setupObservers()
}
override fun onStop() {
super.onStop()
viewmodel.tabLayoutPos = binding.mainViewPager.currentItem
}
private fun setupObservers() {
viewmodel.tabInfoList.observe(viewLifecycleOwner)
{
if (it != null) {
viewPagerAdapter.tabInfoList = it
//set the viewPager to the page user last seen
pagerPos = it.size - 2
if (viewmodel.tabLayoutPos != -1)
pagerPos = viewmodel.tabLayoutPos
if (it.size > 2)
binding.mainViewPager.currentItem = pagerPos
//tabLayout.selectTab(tabLayout.getTabAt(pagerPos))
else
binding.mainViewPager.currentItem = 0
//tabLayout.selectTab(tabLayout.getTabAt(0))
}
}
viewmodel.timeRange.observe(viewLifecycleOwner) {
viewPagerAdapter.timeRange = it
}
}
private fun setUpViewPager() {
tabLayout = (requireActivity() as MainActivity).getTabLayout()
viewPagerAdapter =
TabFragmentStateAdapter(this)
binding.apply {
mainViewPager.adapter = viewPagerAdapter
mainViewPager.offscreenPageLimit = 2
TabLayoutMediator(tabLayout,binding.mainViewPager,true) { tab,position ->
tab.text = viewPagerAdapter.tabInfoList[position].tabTitle
}.attach()
//fix the weird error of viewpager2,where switch to another time range and back to month
//caused it to shrink,no idea why lol
mainViewPager.updateLayoutParams {
this.height = ViewGroup.LayoutParams.MATCH_PARENT
}
tabLayout.tabMode = TabLayout.MODE_AUTO
}
}
}
TabFragmentStateAdapter.kt
class TabFragmentStateAdapter(fragment : Fragment) :
FragmentStateAdapter(fragment) {
var tabInfoList: List<TabInfo> = listof()
set(value) {
field = value
notifyDataSetChanged()
}
......
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)