kotlin Viewpager 2在快速打开时导致索引问题

8fq7wneg  于 2022-12-04  发布在  Kotlin
关注(0)|答案(1)|浏览(140)

我正在ViewPager 2中工作,在我的应用程序中有Paging 3库。当我一次又一次地打开我的视图寻呼机屏幕时,即打开屏幕并关闭它,如此反复。最初几次它打开正确的页码,但有时它给我错误的页码打开时,快速打开和关闭。我问了一个类似的question,它解决了这个问题,但出现了类似的问题,100%确信这个问题与ViewPager 2有关

class activity : BaseActivity() {

    private val viewModel: ViewPagerViewModel by inject()
    private var adapter = createAdapter()
    private lateinit var binding: ViewPagerActivityLayoutBinding

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = ViewPagerActivityLayoutBinding.inflate(layoutInflater)
        setContentView(binding.root)
        setUpRepoAndAdapter()
    }

    private fun setUpRepoAndAdapter() {
        val viewRepository = ViewRepository()
        lifecycleScope.launchWhenCreated {
            repeatOnLifecycle(Lifecycle.State.STARTED) {
                viewModel.createRepositoryData(viewRepository).collect { data ->
                    adapter = createAdapter()
                    binding.viewViewpager.adapter = adapter
                    adapter.submitData(data)
                }
            }
        }
    }

    private fun createAdapter(): ViewPagerAdapter {
        return ViewPagerAdapter(action = {
            launchScreen()
        })
    }

    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        super.onActivityResult(requestCode, resultCode, data)
         if (requestCode == DAILY_VIEW) {
            data?.let { intent ->
                (intent.extras?.get(BUNDLE_KEY) as? Date)?.let { clickedDate ->
                    viewModel.initialDate = clickedDate
                    setUpRepoAndAdapter()
                }
            }
        }
    }
}

我正在添加我的原始应用程序的截屏视频。我点击了**1st Dec.**Date,它有时会打开为2nd Dec.,有时会打开正确的日期。我不明白为什么会发生这种情况this。上面的堆栈溢出链接里面有我的GitHub示例项目链接。

aiazj4mn

aiazj4mn1#

Android问题跟踪器中报告了一个与此问题相关的官方问题。此问题仍处于开放状态,尚未解决。不过,一些人建议了几种可能的解决方案:
1.确保适配器正确实现了getItemId()方法。
1.不要在onCreate()回调中使用setCurrentItem()。
1.请使用smoothScrollToPosition(),而不要使用setCurrentItem()。
1.尝试使用setOffscreenPageLimit()限制内存中保留的页数。
1.确保您使用的是ViewPager2库的最新版本。

相关问题