java - 应该读取和存储捆绑包的 Android MVVM
问题描述
我有一个带有几个文本和一个图像的简单活动,我在创建活动时使用一个包获取此视图元素的数据。现在我正在尝试将架构更改为 MVVM,我想知道如何以及在哪里存储捆绑信息?
对于我一直在读取的数据应该处于“模型”级别,但我已经在包中拥有数据,我应该创建模型并将数据存储在那里还是 ViewModel 中?
我的 ViewModel 看起来像这样:
public class SimpleInfoViewModel extends ViewModel {
private Context context;
public SimpleInfoViewModel(Context context) {
this.context = context;
}
}
而我的观点:
public class SimpleInfoActivity extends AppCompatActivity {
private SimpleInfoViewModel viewModel;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getViewBundledInfo();
initViewModel();
}
private void getViewBundledInfo() {
final Bundle extras = getIntent().getExtras();
if (extras != null) {
title = extras.getString("title");
}
}
private void initViewModel() {
SimpleInfoViewModel viewModel = new SimpleInfoViewModel(this);
}
解决方案
您需要创建一个名为 SimpleInfoViewModelFactory 的类扩展 ViewModelProviders.Factory。
SimpleInfoViewModelFactory(String title) extends ViewModelProviders.Factory {.. copy paste codr from document.. .}
在活动中创建 ViewModel 的方式是完全错误的
SimpleInfoViewModelFactory vmf = SimpleInfoViewModelFactory(bundle.extras.title)
SimpleInfoViewModel vm = VieeModelProvders.of(this,vmf).get(SimpleInfoViewModel.class)
这会像现在一样创建一个 ViewModel,但您可以使用它来获得初始值。你可以在文档上看到。它很容易
推荐阅读
- java - 如何在 Windows 上使用 IntelliJ IDE 在 java 程序中使用 c++ 库?
- python - 在 vscode 中连接到 python 解释器的问题
- python-3.x - 从 Django 中的 Google Cloud Console 提供的静态文件
- regex - 从字符串中删除或替换 $ 字符
- microsoft-graph-api - ms Graph API 更新 tablerow 失败,出现 400 客户端错误:对 url 的错误请求
- c# - 如何设置枚举的数值
- python - 提取前缀和多个后续匹配
- laravel - 我应该如何处理 Laravel 应用程序中 Vue 组件中的严重错误?
- haskell - 堆栈安装在 MacOS Big Sur 上失败
- amazon-web-services - AWS Route53 - ChangeRecordSet - DELETE - 更改状态为“INSYNC”,但实际记录永远不会被删除