首页 > 解决方案 > 应该读取和存储捆绑包的 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);
    }

标签: javaandroidmvvm

解决方案


您需要创建一个名为 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,但您可以使用它来获得初始值。你可以在文档上看到。它很容易


推荐阅读