android - 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。我该如何解决?
解决方案
推荐阅读
- apache-spark - 动态循环所有列名的数据集
- python - 通过在一段文本中查找关键字来过滤数据框
- php - 如何在 PHP 中从画布中删除黑色背景?
- excel - 使用 Excel VBA 宏在 Word 中查找和替换页脚文本
- python - Multiproces 具有可迭代和可迭代参数的函数
- database - 如何保存更改?
- pandas - 使用 pyspark 将 base64 字符串转换为图像时出错
- python - 将具有 12 小时 AM/PM(无零填充)的 DateTime 转换为 24 小时格式
- logstash-jdbc - 如何使用 logstash 连接 presto 以从 Cassandra DB 获取数据
- dynamics-crm - 将数据从 Dynamics CRM 加载到 SQL Server