ViewPager2不还原位置

时间:2020-11-05 16:15:07

标签: android kotlin android-viewpager android-viewpager2 android-paging

我的布局中有一个基本的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的错误?

0 个答案:

没有答案