获取 SettingsActivity 的 ViewModel(MVVM,Android P)

Getting ViewModel for SettingsActivity (MVVM, Android P)

如果您选择带有 设置 的模板在 Androdi Studio 3.4 中创建项目,您将看到 SettingsActivity 扩展 AppCompatPreferenceActivity 扩展 [=14] 的示例应用=] 扩展 ListActivity 扩展 android.app.Activity,但不扩展 FragmentActivity,这是通过

SettingsActivity 创建 ViewModel 所必需的
SettingsViewModel viewModel

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    viewModel = ViewModelProviders.of(this, viewModelFactory).get(SettingsViewModel.class);
}

因为 ViewModelProviders.of() 可能只接受 FragmentActivity 作为第一个参数。

是否可以为AppCompatPreferenceActivity创造一个ViewModel或者是Google偏好的下一个地狱转世?!

此模板已在 Android Studio 3.5 中完全重做以匹配 Settings documentation:

The recommended way to integrate user configurable settings into your application is to use the AndroidX Preference Library. This library manages the user interface and interacts with storage so that you define only the individual settings that the user can configure. The library comes with a Material theme that provides a consistent user experience across devices and OS versions.

AndroidX Preferences Library 根本不需要您使用 PreferenceActivity - 您会注意到它直接使用 AppCompatActivity,将首选项放入 PreferenceFragmentCompat。由于 AppCompatActivity 扩展了 FragmentActivity,您将能够毫无问题地使用 ViewModel 和其他 AndroidX API。