Android MVVM框架的认识和使用(一)

本文介绍了Android开发中MVVM框架的使用,包括如何配置MVVM环境,展示如何在XML和代码中绑定数据,以及如何处理基本数据类型和引用数据类型的设置。此外,还讨论了点击事件的处理方式,并提供了示例代码。
摘要由CSDN通过智能技术生成

关于这个MVVM,现在公司的框架就是MVVM,刚开始感觉MVVM真的麻烦,真的不爽,但是真正用起来的时候,感觉比MVP好用多了,好用的不是点半点。= - =。嗯,喜新厌旧~。

关于MVVM的理解如下:

Model :负责数据实现和逻辑处理,类似MVP。
View : 对应于Activity和XML,负责View的绘制以及与用户交互,类似MVP。
ViewModel : 创建关联,将model和view绑定起来,如此之后,我们model的更改,通过viewmodel反馈给view,从而自动刷新界面。

项目中使用的MVVM框架Github地址:
https://github.com/googlesamples/android-architecture/tree/todo-mvvm-databinding

开发者下载该项目,然后需要复制几个工具类到自己的项目中:
ActivityUtils.java
ViewModelHolder.java

然后我们开启android自带的DataBinding开关,再app下的build.gradle中android节点下添加如下代码:

dataBinding {
        enabled = true
    }

这样MVVM的环境就算配置好了,接下来就是愉快的玩耍了~

首先还是老样子,UI显示:

hello world

首先我们创建我们的Fragment和ViewModel分别通过如下方法:

    @NonNull
    private TestOneFragment findOrCreateViewFragment() {
        TestOneFragment tasksFragment =
                (TestOneFragment) getSupportFragmentManager().findFragmentById(R.id.contentFrame);
        if (tasksFragment == null) {
            // Create the fragment
            tasksFragment = TestOneFragment.newInstance();
            ActivityUtils.addFragmentToActivity(
                    getSupportFragmentManager(), tasksFragment, R.id.contentFrame);
        }
        return tasksFragment;
    }
    private TestOneViewModel findOrCreateViewModel() {
        // In a configuration change we might have a ViewModel present. It's retained using the
        // Fragment Manager.
        @SuppressWarnings("unchecked")
        ViewModelHolder<TestOneViewModel> retainedViewModel =
                (ViewModelHolder<TestOneViewModel>) getSupportFragmentManager()
                        .findFragmentByTag(TEST_ONE_VIEW_MODEL_TAG);

        if (retainedViewModel != null && retainedViewModel.getViewmodel() != null) {
            // If the model was retained, return it.
            return retainedViewModel.getViewmodel();
        } else {
            // There is no ViewModel yet, create it.
            TestOneViewModel viewModel = new TestOneViewModel(getApplicationContext());
            // and bind it to this Activity's lifecycle using the Fragment Manager.
            ActivityUtils.addFragmentToActivity(getSupportFragmentManager(), ViewModelHolder.createContainer(viewModel),
                    TEST_ONE_VIEW_MODEL_TAG);
            return viewModel;
        }
    }

因为数据源改变了,XML的值自动改变,说明viewModel控制着XML,那就需要将XML和viewModel链接起来,同理我们有时候还需要获取代码层UI也就是Fragment的数据或者方法,此时也可以将XML和Fragment连接起来。

怎样连接呢?首先需要在XML声明ViewModel和Fragment变量,XML(test_one_fragment)代码如下:

<?xml version="1.0" encoding="utf-8"?>
<layout>
    <data>
        <variable
            name="view"
            type="com.example.liumengqiang.mvvmoneproject.TestOneFragment"/>

        <variable
            name="viewModel"
            type="com.example.liumengqiang.mvvmoneproject.TestOneViewModel"/>

    </data>
    
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值