android mvvm学习

慕课课程学习地址:android开发中的mvc_mvp_mvvm
学习代码地址:github

简介

MVVM是Model-View-ViewModel的简写,MVVM在MVP的基础上实现了数据视图的绑定(DataBinding),当数据变化时,视图会自动更新;视图变化时,数据也会自动更新。
优点:相对于mvp 实现了数据和视图的双向绑定,极大的简化代码

databinding使用

1、使用databinding:在app/build.gradle 里的android标签下添加

dataBinding{
    enabled = true
}

2、打开xml文件,选中根目录,alt+enter convert to data binding layout 即可
3、打开对应的java文件,将setcontentView代码删除,使用databinding

//setContentView(R.layout.activity_main);
ActivityMainBinding binding;
binding= DataBindingUtil.setContentView(this, R.layout.activity_main);

4、如果xml里需要使用实体类的属性,则需要在根布局layout里的data标签下添加:
然后再textview或者button按钮里使用:

<data>
	<variable
	    name="account"
	    type="com.imfondof.mvvmdemo.Account" />
</data>

<TextView
	......
    android:text="@{account.name + '|'+account.level}"
     />

java代码里只需要添加数据即可

account = new Account("22", 100);
binding.setAccount(account);

5、添加单击事件
xml里需要添加当前view

<data>
        <variable
            name="activity"
            type="com.imfondof.mvvmdemo.MainActivity" />
</data>

    <Button
        ......
        android:onClick="@{activity.onclick}" />

java代码里添加方法

public void onclick(View view) {
    account.setLevel(account.getLevel()+1);
    binding.setAccount(account);
}

6、设置实体类,无需每次改动数据后setAccount,改动后自动更新
(1)将实体类 继承BaseObservable ,在getLevel方法前添加注解 getLevel,并在setLevel方法里添加notifyPropertyChanged(BR.level);【其中BR.level是生成的】
(2)java代码里只需要更改数据,无需set方法了

public class Account extends BaseObservable {
    private String name;
    private int level;

    public Account(String name, int level) {
        this.name = name;
        this.level = level;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Bindable
    public int getLevel() {
        return level;
    }

    public void setLevel(int level) {
        this.level = level;
        notifyPropertyChanged(BR.level);
    }
}
public void onclick(View view) {
    account.setLevel(account.getLevel() + 1);
}

7、单向绑定?双向绑定?
以上的demo属于单向绑定,即数据更改了 UI自动更新
双向绑定是:同时,UI更改了之后数据也更新:xml里在@后面添加一个等号即可

android:onClick="@={activity.onclick}"

使用MVVM实现需求

(学习代码地址:github
V层:获取用户输入;显示成功/失败界面
VM层:业务逻辑处理,数据更新
M层:查询账号数据

步骤
1、提供view(即Activity)、viewmodel、model三层
2、布局修改为databinding布局
3、view与ViewModel之间通过DataBinding进行通信
4、获取数据显示在界面上

代码:github

问题
1、无法找到BR文件?
rebuild项目即可

2、在activity里需要点击按钮,请求权限时,需要怎么做?
使用Livedata

  • Livedata是一个可以被观察的数据持有者,它可以通过添加观察者的方式来让其他组件观察它的变更
  • LiveData遵从应用该程序的生命周期(LiveData的观察者已经销毁,则LiveData不会通知观察者)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值