android 如何在Jetpack Compose中返回时更新状态

8yoxcaq7  于 2023-06-20  发布在  Android
关注(0)|答案(1)|浏览(198)

如何确保在第一个屏幕中的feedList列表在第二个屏幕中添加新的提要项后更新?我使用一个navController在两个屏幕之间导航,并使用ObjectBox作为数据库。
在我的应用程序中,第一个屏幕显示一个提要列表,第二个屏幕允许我添加一个新的提要项。当我在第二个屏幕上添加新的提要项并返回到第一个屏幕时,列表不包括新添加的项。我怀疑函数viewModel.onGetFeedList()没有在适当的时间执行,它也在LaunchedEffect中。

  1. LaunchedEffect(key1 = Unit) {
  2. vm.composeViewModel.onGetFeedList()
  3. vm.composeViewModel.getFeedCollectionList()
  4. }

为了提供一些上下文,我使用ObjectBox作为数据库,并设置了必要的实体、DAO和一个ViewModel来处理数据操作。

  1. fun saveSingleRecord(modal: Feed): Long {
  2. val obj = box().query(Feed_.mId.equal(modal.mId)).build()?.findUnique()
  3. if (obj == null) {
  4. box().put(modal)
  5. return 1
  6. } else {
  7. obj.mId = modal.mId
  8. obj.name = modal.name
  9. obj.nepaliName = modal.nepaliName
  10. obj.DMPercent = modal.DMPercent
  11. obj.MEOrMIPerKg = modal.MEOrMIPerKg
  12. obj.DCPPerKg = modal.DCPPerKg
  13. obj.NDFPercent = modal.NDFPercent
  14. obj.CaPerGram = modal.CaPerGram
  15. obj.PPerGram = modal.PPerGram
  16. obj.concentrate = modal.concentrate
  17. obj.price = modal.price
  18. obj.categoryId = modal.categoryId
  19. obj.SN = modal.SN
  20. box().put(obj)
  21. Logger.log("AFTER EDIT = ${GsonUtils.toString(obj)}")
  22. return 2
  23. }
  24. }

我想知道应该在何处以及何时执行viewModel.onGetFeedList(),以确保从第二个屏幕返回后,第一个屏幕显示更新后的提要列表。您能指导我如何正确地实现这一目标吗?

hof1towb

hof1towb1#

  1. LaunchedEffect(key1 = true) {
  2. vm.composeViewModel.onGetFeedList()
  3. vm.composeViewModel.getFeedCollectionList()
  4. }

用true代替unit。希望能帮上忙

相关问题