首页 > 解决方案 > viewpager2 不会一直设置当前项目

问题描述

我正在尝试存储用户访问并在用户返回应用程序后恢复的最后一个位置。所以我将 ViewPager 的状态保存在数据库中,如下所示:这是片段代码:

    override fun onStop() {
        viewModel.saveLastPageNumber(
            unitID = info.unitID,
            courseID = info.courseID,
            progress = binding.viewPager.currentItem
        )
        super.onStop()
    }

这是 ViewModel 代码:

    fun saveLastPageNumber(unitID: Int, courseID: Int, progress: Int) {
        scope.launch {
            withContext(Dispatchers.IO) {
                val unit = UnitProgressModel(
                    courseID = courseID,
                    unitID = unitID,
                    progress = progress
                )
                database.unitProgressDao.addProgress(unit)
            }
        }
    }

然后我像这样检索最后一个位置:

    override fun onStart() {
        viewModel.getLastPageNumber(unitID = info.unitID, courseID = info.courseID)
            .observe(viewLifecycleOwner, {
                it?.let {
                    Log.i("Log", "page number is $it")
                    binding.viewPager.setCurrentItem(it, false)
                    Log.i("Log", "viewPager number is ${binding.viewPager.currentItem}")
                }
            })
        super.onStart()
    }

但有时,ViewPager 不会设置正确的页面。如您所见,我设置了两个日志。值得一提的是,page number log总是显示正确的页码,但ViewPager number log并不总是正确的。有时,页码为 1(并且在日志中正确打印),但 ViewPager 编号为 0。我该如何解决?

标签: androidkotlinandroid-lifecycleandroid-viewpager2

解决方案


推荐阅读