android-viewmodel 相关问题

是否可以在不使用NavHost的情况下保存和提取savedStateHandle(视图模型)?

我正在使用 NavigableListDetailPaneScaffold 来显示项目列表,然后单击时显示详细信息。 屏幕附带有它的 viewModel,我很想在

回答 1 投票 0

使用 Turbine 测试 ViewMode 初始状态的最佳实践

我有一个简单的 ViewModel,其状态保存了一些数据。状态在我的 ViewModel 的 init 函数中初始化: ViewModelState.kt 数据类 ViewModelState( val myInfo: String = "&...

回答 1 投票 0

具有数据类的 LiveData 不会在 ViewModel 中更新

我想在我的 MainViewModel 中使用我的数据类 AuthData。 de.hsfl.appamigos.capturetheflag 包 导入 androidx.lifecycle.MutableLiveData 数据类 AuthData(var game: MutableLiveData 我想在我的 MainViewModel 中使用我的数据类 AuthData。 package de.hsfl.appamigos.capturetheflag import androidx.lifecycle.MutableLiveData data class AuthData(var game: MutableLiveData<String>) package de.hsfl.appamigos.capturetheflag import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel class MainViewModel : ViewModel() { private val authData: MutableLiveData<AuthData> = MutableLiveData() fun getGame(): LiveData<AuthData> = authData fun setGame(newAuthData: AuthData) { authData.value?.game = newAuthData.game } fun startNewGame(text: String) { val newGame = MutableLiveData("1234") val newAuthData = AuthData(newGame) setGame(newAuthData) } } 当我尝试观察我的片段之一的变化时,它没有得到通知。 package de.hsfl.appamigos.capturetheflag import android.os.Bundle import androidx.fragment.app.Fragment import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import androidx.fragment.app.activityViewModels import androidx.navigation.fragment.findNavController import de.hsfl.appamigos.capturetheflag.databinding.FragmentLobbyBinding class LobbyFragment : Fragment() { ... val mainViewModel: MainViewModel by activityViewModels() override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?, ): View? { // Inflate the layout for this fragment //val root = inflater.inflate(R.layout.fragment_lobby, container, false) val binding = FragmentLobbyBinding.inflate(inflater) val naviGraph = findNavController() mainViewModel.getGame().observe(viewLifecycleOwner) { binding.textViewGameID.text = it.game.toString() } ... return binding.root; //return inflater.inflate(R.layout.fragment_lobby, container, false) } } 我尝试取出数据类,只使用可变的,并且工作正常,所以所有连接都有点正确。 我想这是因为 authData 没有改变,但属性 game 改变了。如何观察属性本身的变化? 我无法解决数据类问题,因为这是我的教授的要求。我可以使用普通课程,但我看不出这有什么帮助。 我猜这是因为 authData 没有改变,但属性游戏改变了。 正是如此。 如何观察属性本身的变化? 观察属性本身。 mainViewModel.getGame().game.observe(viewLifecycleOwner) { binding.textViewGameID.text = it.game.toString() } 或者更新当前观察到的整个对象。 fun setGame(newAuthData: AuthData) { //authData.value?.game = newAuthData.game authData.value = newAuthData } 附注- 你的方法名称很混乱。获取并设置“游戏” 获取并设置一个“AuthData”,它本身有一个“游戏”?如果您要获取并设置“AuthData”,只需将其称为 getAuthData 和 setAuthData。 您在 LiveData 的数据类中有一个 LiveData。听起来不太对。 您的数据类应该只包含简单的类,即数字或字符串等,或其他数据类。此外,当从视图模型中公开时,您的数据类应该是不可变的,也就是说,它们只包含 val 属性。你的数据类应该看起来像这样: data class AuthData(val game: String) 使视图模型适应更改后的数据类,如下所示: class MainViewModel : ViewModel() { private val authData: MutableLiveData<AuthData> = MutableLiveData() fun getGame(): LiveData<AuthData> = authData private fun setGame(newAuthData: AuthData) { authData.value = newAuthData } fun startNewGame(text: String) { val newGame = "1234" val newAuthData = AuthData(newGame) setGame(newAuthData) } } 现在一切都应该正常了。

回答 2 投票 0

观察LiveData时如何触发重组

我正在将应用程序从视图迁移到撰写,并尝试每五分钟触发一次计划更新,其中如果数据发生变化,撰写应该重新撰写。还在m中使用RxJava...

回答 1 投票 0

我应该在 ViewModel 中包含 LifecycleOwner 吗?

当前需要 LifecycleOwner 才能创建观察者。 我有在 ViewModel 中创建观察者的代码,因此在我的

回答 4 投票 0

Android jetpack compose 中的记住结构仅在可组合函数的上下文中使用?

我的问题是关于 jetpack compose 和 kotlin 中使用的记忆结构。正如您很可能已经知道的那样,这些是我所指的: var 首先 = 记住 { mutableStateOf(true) ...

回答 1 投票 0

在jetpack compose中找不到viewModels

我正在尝试将委托函数与 viewModels 一起使用,但在尝试导入它时遇到了问题。 @可组合 有趣的 ImagePickerScreen() { val viewModel :ViewModel 的 ImageViewModel...

回答 1 投票 0

为什么在回调中调用ViewModel时会发生重组?

我完全混淆了撰写概念。 我有一个代码 @可组合 有趣的 HomeScreen(viewModel: HomeViewModel = getViewModel()) { 脚手架{ val isTimeEnable 通过 viewModel.isTimerEnable。

回答 3 投票 0

在拉动刷新时再次触发 kotlin 流程

我目前面临以下问题,希望有人能够提供帮助: 我的 ViewModel 中有一个流程为我提供了一些数据。现在我希望在 pull-to-

回答 2 投票 0

如何从 Firestore 获取与另一个 LiveData 的内容相匹配的项目列表的 LiveData?

我的 Android 应用程序使用 Firebase Firestore。我有用户的集合,也有成就的集合。每个成就都有一个所有者列表,它们是用户集合的文档 ID...

回答 1 投票 0

Jetpack Compose:“by viewModels()”与“viewModel<ViewModelName>()”

这里有什么区别? val myViewModel: MyViewModel by viewModels() 相对 val myViewModel = viewModel() 第一种方式如何运作?它如何知道要使用哪个 ViewModel

回答 1 投票 0

模块中共享 ViewModel

我有一个 Activity,下面有多个片段。我想与共享视图模型共享数据,但它们都位于不同的模块中。我无法获取 ActivityViewModel 类。当我收到

回答 1 投票 0

通过CalendarView点击不同日期选择日期时如何检索条目

我试图通过单击屏幕上的 CalendarView 来查询条目(1 个或多个),但我陷入了试图弄清楚如何继续以显示这些条目(因为我是新的)的过程中。我没有

回答 1 投票 0

在 Android Composabe 函数之间共享视图模型

在可组合函数之间共享相同的 viewModel 时是否会出现任何问题?

回答 1 投票 0

Android Jetpack Compose:选项卡开关上的 ViewModel 状态重置

我正在开发一个Android应用程序,其中有一个底部栏。我正在使用 Jetpack Compose、hilt 和 ViewModel。我有一个 ViewModel (ShopListHomeViewModel) 来管理屏幕的状态 (ShopListHomeS...

回答 1 投票 0

如何将 ViewModel 状态与(房间)数据库同步?

我一直在阅读大多数 Android 文档等,但我找不到有关此主题的信息。 我知道如何在 viewModel 中创建和编辑状态,如许多 Android 代码实验室中所述。但我不是...

回答 1 投票 0

在 ViewModel 中收集流

我正在使用 Compose 和 Room 数据库编写一个 Android 应用程序。我有一个可行的解决方案,但我不确定我是否使用了最佳实践。我正在 ViewModel 的 init 中收集两个流,以便我可以创建...

回答 1 投票 0

在 Android Kotlin 应用程序中使用 Hilt 注入 ViewModel 时遇到问题

我正在开发一个 Android 应用程序,使用 Kotlin、Jetpack Compose 和 Hilt 进行依赖注入。尽管遵循了 Hilt 的推荐设置,但我在尝试时仍然遇到运行时异常...

回答 1 投票 0

使用 hilt 将类注入可组合函数

我发现我真的不需要我的视图模型具有生命周期意识,我想用平面 kotlin 类替换它们来处理 ui 逻辑,我的问题是 hilt;因为它只允许...

回答 1 投票 0

使用Factory创建共享ViewModel

我有一个带有 3 个选项卡的 TabLayout 的 DocumentsFragment: TabRulesFragment, TabProceduresFragment, TabGuidanceFragment 在 DocumentsFragment 中我初始化一个共享 viewModel,DocumentsSharedViewModel ...

回答 2 投票 0

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