使用 ViewPager2 + Fragment + ViewModel 进行相册预览的最佳方式是什么

问题描述 投票:0回答:0

我有一个带有 FragmentStateAdapter 的 viewPager2:

class MyAdapter(activity: FragmentActivity) : FragmentStateAdapter(activity) {
    override fun getItemCount(): Int = 1000_00000

    override fun createFragment(position: Int): Fragment = TestFragment.newInstance(position)
}

和 TestFragment 中的 TestViewModel:

class TestViewModel : ViewModel() {

    val someState: MutableLiveData<Int> = MutableLiveData(0)
}

class TestFragment : Fragment() {

    val viewModel: TestViewModel by viewModels()
    ...
}

我们知道,对应Fragment的ViewModel会随着Fragment的销毁(onDestroy)被销毁回收,所以我们保存在viewModel中的状态(TestViewModel内部)会丢失。当然,UI 层(在 TestFragment 中)的一些状态也会丢失。

之所以被回收是因为ViewPager2会回收屏幕外的Fragment

所以想问一下,当ViewPager2中的views都是Fragment(TestFragment)并且数量非常多的时候(比如专辑预览),有没有更好的办法解决fragment状态保存,viewModel状态保存,实例化Fragment(不像 TestFragment.newInstance(position)..)?

要实现的场景就像手机相册。打开图片时,可以使用viewPager2左右滑动,可以在viewPager2上查看所有图片。至于为什么要用Fragment来展示图片,是因为相册里面不仅有图片还有视频,所以用Fragment作为容器来承载图片详情或者视频详情更容易管理生命周期和资源。当然这会导致viewPager2滑动时fragments和viewModels被回收

android android-fragments android-viewmodel android-viewpager2
© www.soinside.com 2019 - 2024. All rights reserved.