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 次 |
最近记录: |