我的布局中有一个基本的ViewPager2。
<androidx.viewpager2.widget.ViewPager2
android:id="@+id/submissionViewPager"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:listitem="@layout/item_video" />
我通过在onViewCreated
中提供适配器来设置ViewPager,它实际上是ConcatAdapter,但是我不确定这是否重要。
submissionViewPager.apply {
orientation = ViewPager2.ORIENTATION_VERTICAL
adapter = pagingAdapter.withLoadStateInitialAndFooter(
initial = InitialLoadStateAdapter(pagingAdapter::retry),
footer = AppendLoadStateAdapter(pagingAdapter::retry)
)
offscreenPageLimit = 2
}
然后我订阅ViewModel状态
viewLifecycleOwner.lifecycleScope.launchWhenStarted {
viewModel.state.collectLatest { pagingAdapter.submitData(state.pagingData) }
}
问题是当我旋转设备时,将重新创建页面适配器,这意味着直到收集状态之前,它都是空的。由于为空,因此ViewPager无法重置onRestorePendingState()
// Now we have an adapter, we can clamp the pending current item and set it
mCurrentItem = Math.max(0, Math.min(mPendingCurrentItem, adapter.getItemCount() - 1));
我真的应该等到填充适配器后再在ViewPager上进行设置吗?或者这是ViewPager2的错误?