如何通过 viewModels 获取 viewModel?(fragment-ktx)

9 浏览
0 Comments

如何通过 viewModels 获取 viewModel?(fragment-ktx)

我正在为Activity及其所有的fragment使用单一的viewModel。因此,为了初始化viewModel,我需要在所有fragment的onActivityCreated中编写以下设置代码:\noverride fun onActivityCreated(savedInstanceState: Bundle?) {\n super.onActivityCreated(savedInstanceState)\n viewModel = ViewModelProviders.of(activity!!).get(NoteViewModel::class.java)\n}\n我正在阅读Android KTX扩展页面(参见此处),我发现可以像这样初始化viewModel:\n// 获取与此Fragment范围绑定的ViewModel的引用\nval viewModel by viewModels()\n// 获取与其Activity范围绑定的ViewModel的引用\nval viewModel by activityViewModels()\n所以我在我的gradle(app)中添加了以下依赖项:\n//ktx android\nimplementation \'androidx.core:core-ktx:1.0.2\'\nimplementation \'androidx.fragment:fragment-ktx:1.0.0\'\nimplementation \"androidx.lifecycle:lifecycle-extensions:2.0.0\"\n但是当我尝试在我的应用程序中使用viewModels/activityViewModels时,找不到它们的引用。我想知道如何使用这些扩展并附带一些基本示例,我尝试搜索了示例但没有找到任何内容。

0
0 Comments

问题的原因是如果想要在活动中使用Kotlin委托来获取ViewModel,就需要添加一个依赖项。

解决方法是在活动中添加以下依赖项:

//ViewModels delegation extensions for activity

implementation 'androidx.activity:activity-ktx:1.3.1'

这个解决方法对我来说有效。

是的,这是正确的答案。谢谢。

0
0 Comments

问题:如何通过viewModels获取viewModel?(fragment-ktx)

问题原因:在使用viewModels委托属性时,出现了一些混淆和困惑。有些人不确定viewModels委托属性是否只能在Fragment中使用,或者在Activity中是否也可以使用。

解决方法:根据回答中的信息,我们可以得出以下解决方法:

1. 确保在项目中添加了"androidx.fragment:fragment-ktx"依赖项。

2. 如果需要在Activity中使用委托属性,可以添加"androidx.activity:activity-ktx"依赖项,并使用类似的委托属性来获取Activity的ViewModel。

3. 确保使用的是最新版本的"androidx.fragment:fragment-ktx"依赖项,至少是1.1.0版本。

4. 如果遇到了问题,可以查阅官方文档来获取更多信息。

根据以上内容,我们可以得出以下结论:

- "androidx.fragment:fragment-ktx"依赖项是用于在Fragment中使用委托属性获取ViewModel的。

- 如果需要在Activity中使用委托属性获取ViewModel,可以添加"androidx.activity:activity-ktx"依赖项,并使用类似的委托属性来获取Activity的ViewModel。

- 确保使用的是最新版本的依赖项,以确保功能的稳定性和正确性。

- 如果遇到问题,可以查阅官方文档来获取更多信息和解决方案。

以上就是关于如何通过viewModels获取viewModel的问题原因和解决方法的整理。希望对大家有所帮助!

0
0 Comments

问题的原因是使用了最新的版本后,编译器报错,无法将使用JVM目标1.8构建的字节码内联到使用JVM目标1.6构建的字节码中。

解决方法是在build.gradle文件中的每个模块中声明sourceCompatibility和targetCompatibility为1.8,并且设置kotlinOptions中的jvmTarget为"1.8"。此外,还可以在全局项目的build.gradle中使用compileOptions来解决这个问题。

0