如何从 Observer android kotlin 保存值

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

我有一个

ROOM
数据库,我从中获取值。

我正在使用

Observer
来获取数据,但是有一个问题。我的
availability
中有一个全局变量
Fragment
,我想将值存储在其中,因为我需要在代码的许多部分使用这个变量。然而,
Observer
,出于某种原因,没有将任何数据存储到这个变量中。

代码:

private var availability = 0

override fun onCreateView(
    inflater: LayoutInflater, container: ViewGroup?,
    savedInstanceState: Bundle?
): View {
    _binding = FragmentCoursesBinding.inflate(inflater, container, false)

    viewModel.availability.observe(viewLifecycleOwner) {
        availability = it
    }

    return binding.root
}

我之所以需要这样一个全局变量,正如我前面所说,是为了在代码的其他部分使用它,因为其他UI元素的状态依赖于它,这也依赖于其他

Observers
.

怎么会这样?

android kotlin android-room android-livedata android-viewmodel
1个回答
0
投票

答案有两种形式

  1. 使用 Jetpack Compose
  2. 使用普通的

回答 1/2,如果您使用 Jetpack Compose 构建您的应用程序,这将可以只在一行中执行此操作:

    private val availability = 0

override fun onCreateView(
    inflater: LayoutInflater, container: ViewGroup?,
    savedInstanceState: Bundle?
): View {
    _binding = FragmentCoursesBinding.inflate(inflater, container, false)

    //this single line
        availability = viewModel.availability.collectAsState(initial=0).value
        

    return binding.root
}

回答 2/2 当你没有使用 compose 时,你只能选择在花括号中的上下文中工作

    viewModel.availability.observe(viewLifecycleOwner) {
            availability = it
    //TODO: in only this context.... Call all
 //Functions, objects, Variables, classes that you want to use the up-to-date value of availability from here 
        }

该上下文之外的值将不会获取最新数据,因为编译器将根据上下文分配值

© www.soinside.com 2019 - 2024. All rights reserved.