gpt4 book ai didi

AndroidViewModel 实例化而不传递应用程序上下文?

转载 作者:行者123 更新时间:2023-12-03 19:42:53 24 4
gpt4 key购买 nike

我目前正在挖掘 Android Room with a View示例应用程序,提供完整源代码 here .在这个项目中,一个 WordViewModel 类型 AndroidViewModel被定义为:

class WordViewModel(application: Application) : AndroidViewModel(application)

注意构造函数如何需要 Application要传入的实例。
然而,当我检查 MainActivity , WordViewModel被检索而不传入 Application实例:
// Get a new or existing ViewModel from the ViewModelProvider.
mWordViewModel = new ViewModelProvider(this).get(WordViewModel.class);

怎么可能, WordViewModel无需传入 Application 即可检索实例而不使用自定义工厂?

最佳答案

AndroidX-Activity 1.2.0 的 ComponentActivity (因此 AppCompatActivity )实现 HasDefaultViewModelProviderFactory ,返回 ViewModelProvider.AndroidViewModelFactory.getInstance(getApplication())默认情况下从您的 Activity/Fragment 获取应用程序,允许您从此 AndroidViewModelFactory 获取应用程序无需您明确传递它。
然后,该工厂使用 __(application) 通过反射实例化您的 ViewModel。构造函数。
通常最好使用 SavedStateViewModelFactory为了能够收到SavedStateHandle以类似的方式(___(application, savedStateHandle))。
因此,要解决此问题,您需要添加 core-ktx 的最新版本, activity-ktxfragment-ktx在您的代码中明确显示。

关于AndroidViewModel 实例化而不传递应用程序上下文?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60496834/

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