ste*_*wpf 4 android android-viewmodel android-architecture-components
我目前正在研究Android Room with a View示例应用程序,这里提供完整的源代码。在这个项目中,定义了一个WordViewModel类型AndroidViewModel:
class WordViewModel(application: Application) : AndroidViewModel(application)
Run Code Online (Sandbox Code Playgroud)
请注意构造函数如何要求Application传入一个实例。然而,当我检查 时MainActivity,WordViewModel检索了 而不传入
Application实例:
// Get a new or existing ViewModel from the ViewModelProvider.
mWordViewModel = new ViewModelProvider(this).get(WordViewModel.class);
Run Code Online (Sandbox Code Playgroud)
这怎么可能,如何在WordViewModel不传入Application实例和不使用自定义工厂的情况下检索?
AndroidX-Activity 1.2.0 的ComponentActivity(因此AppCompatActivity)实现HasDefaultViewModelProviderFactory,ViewModelProvider.AndroidViewModelFactory.getInstance(getApplication())默认情况下从您的活动/片段返回,允许您从中获取应用程序,AndroidViewModelFactory而无需显式传递它。
然后,该工厂使用__(application)构造函数通过反射实例化您的 ViewModel 。
不过SavedStateViewModelFactory,为了能够以SavedStateHandle类似的方式接收 a通常是一个更好的主意( ___(application, savedStateHandle))。
因此,要解决这个问题,就需要加起来最新的版本core-ktx,activity-ktx并fragment-ktx明确在你的代码。
| 归档时间: |
|
| 查看次数: |
3163 次 |
| 最近记录: |