【发布时间】:2026-01-25 17:10:02
【问题描述】:
我有一个包含两个片段的 viewpager,以及一个 viewModel(存储在父活动中),它保存了当前可见页面索引的记录。
这里是父片段的设置:
override fun setUp() {
super.setUp()
titles = arrayOf(R.string.providers, R.string.create_provider)
fragments = arrayOf(ProvidersListFragment(), CreateProviderFragment())
pagerAdapter = BaseFragmentAdapter(this, fragments = fragments)
}
override fun setUpViews() {
super.setUpViews()
binding.page.adapter = pagerAdapter
TabLayoutMediator(binding.tabs, binding.page) { tab, position ->
tab.text = getString(titles[position])
}.attach()
binding.page.currentItem = viewModel.currentPage.value!!
}
override fun setUpObservers() {
super.setUpObservers()
viewModel.currentPage.observe(viewLifecycleOwner, {
Log.d(TAG, "setUpObservers: it = $it")
if (it != binding.page.currentItem)
binding.page.currentItem = it
})
}
上面的3个方法在onResume()内部调用。
ViewModel 将记录保存到当前索引,如下所示: var currentPage = MutableLiveData<Int>().apply { value = 1 }
从技术上讲,起始页应该是索引 1,我的情况是 TabMediator 显示为好像选择了第 1 页,但布局显示第 0 页的内容(甚至没有完全加载)。
这就是它所显示的:
这就是它应该显示的内容:
这是布局 0:
关于这种行为的任何想法以及如何避免它?
【问题讨论】:
标签: android android-fragments android-viewpager2