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: Android MVVM Demo 是一个基于 MVVM(Model-View-ViewModel)设计模式的 Android 应用示例。这个 Demo 可以让开发者学习 MVVMAndroid 开发中的应用。 这个 Demo 的视图部分、模型部分以及 ViewModel 部分都是独立的。视图部分只用来展示数据及响应用户操作,模型部分只用来管理业务逻辑和数据操作,而 ViewModel 部分则是中间人,负责协调视图和模型之间的交互。 ViewModel 应该提供给视图数据绑定的 Observable 对象,这些 Observable 对象实际上是可观察的数据源。当 ViewModel 中的可观察数据源中的数据发生变化时,这些数据则会自动更新到视图中,从而达到实时同步的效果。 这个 Demo 的视图部分使用了 Android 原生的 Data Binding 技术,来实现视图与 ViewModel 的绑定。当视图需要更新 ViewModel 的数据时,只需要将这些数据绑定到视图上。而对于用户输入的操作,则由 ViewModel 中的命令类来监听并作出相应的反应。 总的来说,这个 Demo 给开发者提供了一个简单、可读性高、封装性强的 MVVM 示例。这个示例既可以为 MVVM 模式的初学者提供基础知识,也可以为实际应用场景的开发提供不少参考。 ### 回答2: Android MVVM(Model-View-ViewModel)是一种设计模式,其中视图通过数据绑定与ViewModel进行通信。ViewModel处理从Model获取的数据,并将其暴露给View,以便视图可以更新其状态。此外,ViewModel可以在用户界面和后端之间充当中间人,并处理业务逻辑。 Android MVVM demo演示了如何在Android应用程序中使用MVVM设计模式。这个demo使用了Android的数据绑定库和LiveData组件。在这个demo中,我们创建一个简单的登录应用程序,在用户输入用户名和密码之后验证用户凭据。我们使用ViewModel来存储和管理用户输入和验证状态,以及LiveData来观察ViewModel中的数据变化并将其更新到用户界面。在用户输入凭据时,ViewModel负责更新LiveData,从而更新UI组件。此外,我们还使用了数据绑定库,它允许我们直接将UI组件绑定到ViewModel中的属性,以便它们可以自动更新。 通过使用MVVM设计模式,我们可以将UI逻辑与业务逻辑分离,从而使我们的代码更易于管理和测试。此外,使用LiveData来观察ViewModel中的数据变化还可以减少我们的代码量和逻辑复杂度。通过观察LiveData,我们可以在需要更新UI时自动更新UI组件,而不必手动处理每个UI组件。这使得我们的代码更加简单,易于维护。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值