gpt4 book ai didi

android - 使用导航组件将 View 模型限定为多个 fragment (不是 Activity )

转载 作者:行者123 更新时间:2023-12-03 13:24:36 27 4
gpt4 key购买 nike

我正在使用导航组件,我希望在几个 fragment 之间共享一个 View 模型,但是当我离开 fragment 时它们应该被清除(因此不将它们限制在 Activity 范围内)我正在尝试将一个 Activity 作为多个 fragment 方法。我已经设法使用多个导航主机来实现这一点,并使用 getParentFragment 将 fragment 范围限定为它,但这只会导致更多的问题,必须将 fragment 包装在其他父 fragment 中,失去后退按钮的无缝工作以及其他黑客让应该工作的东西很简单。有没有人知道如何实现这一目标?我想知道我可以使用 getViewModelStore 是否有任何东西,鉴于下图,我想将 View 模型的范围限定为 createCardFragment2 并在它之后的任何内容中使用它(addPredictions、editImageFragment 以及我尚未添加的其他内容),但是如果我导航回 mainFragment 我想清除 View 模型。

顺便说一句,我不能只在 mainFragment View 模型存储上调用 clear,因为这里还有其他不应该被清除的 View 模型,我想我想要一种方法来告诉导航主机我知道的父 fragment 应该是什么不是如果我从 mainFragment 或 cardPreviewFragment 导航,这将成为一件事或一种使 View 模型新的方法

nav graph

最佳答案

这是 Alex H 接受的答案的具体示例。

在你的 build.gradle (app)

dependencies {
def nav_version = "2.1.0"
implementation "androidx.navigation:navigation-fragment-ktx:$nav_version"
}

View 模型示例
class MyViewModel : ViewModel() { 
val name: MutableLiveData<String> = MutableLiveData()
}

在您的 FirstFlowFragment.kt 中定义
val myViewModel: MyViewModel by navGraphViewModels(R.id.your_nested_nav_id)
myViewModel.name.value = "Cool Name"

在您的 SecondFlowFragment.kt 中定义
val myViewModel: MyViewModel by navGraphViewModels(R.id.your_nested_nav_id)
val name = myViewModel.name.value.orEmpty()
Log.d("tag", "welcome $name!")

现在 ViewModel 被限定在这个嵌套 fragment 中,当嵌套导航被销毁时共享状态也将被销毁,无需手动重置它们。

关于android - 使用导航组件将 View 模型限定为多个 fragment (不是 Activity ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56505455/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com