设计模式笔记之Android DataBinding库(MVVM设计模式)

什么是MVVM

说到DataBinding,就有必要先提起MVVM设计模式。
Model–View–ViewModel(MVVM) 是一个软件架构设计模式,相比MVVM,大家对MVC或MVP可能会更加熟悉。

  • MVC:(VIew-Model-Controller)
    早期将VIew、Model、Controller代码块进行划分,使得程序大部分分离,降低耦合。
  • MVP:(VIew-Model-Presenter)由于MVC中View和Model之间的依赖太强,导致Activity中的代码过于臃肿。为了他们可以绝对独立的存在,慢慢演化出了MVP。在MVP中View并不直接使用Model,它们之间的通信是通过 Presenter (MVC中的Controller)来进行的。
  • MVVM:(Model–View–ViewModel)
    MVVM可以算是MVP的升级版,将 Presenter 改名为 ViewModel。关键在于View和Model的双向绑定,当View有用户输入后,ViewModel通知Model更新数据,同理Model数据更新后,ViewModel通知View更新。

Data Binding

在Google I/O 2015上,伴随着Android M预览版发布的Data Binding兼容函数库。
不知道要扯什么了,还是直接上代码,来看看Data Binding的魅力吧。

  • 环境要求

    Data Binding对使用的环境还是有一定要求的(这货有点挑)
    Android Studio版本在1.3以上
    gradle的版本要在1.5.0-alpha1以上
    需要在Android SDK manager中下载Android Support repository
    然后在对应的Module的build.gradle中添加

  • android {
      ....
      dataBinding {
          enabled =true
      }
    }

    创建对象

  • public class User {
      private String firstName;
      private String lastName;
    
      public User(String firstName, String lastName) {
          this.firstName = firstName;
          this.lastName = lastName;
      }
    
      public String getFirstName() {
          return this.firstName;
      }
    
      public String getLastName() {
          return this.lastName;
      }
    
      public void setLastName(String lastName) {
          this.lastName = lastName;
      }
    
      public void setFirstName(String firstName) {
          this.firstName = firstName;
      }
    }

    布局

  • 在activity_main.xml中布局
  • <?xml version="1.0" encoding="utf-8"?>
    <layout xmlns:android="http://schemas.android.com/apk/res/android">
      <data>
          <import type="com.example.gavin.databindingtest.User"/>
          <variable
              name="user"
              type="User" />
      </data>
      <LinearLayout
          android:layout_width="match_parent"
          android:layout_height="match_parent"
          android:orientation="vertical"
          android:gravity="center"
          >
          <TextView
              android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              android:text="@{user.firstName}"
              android:textSize="20sp" />
          <Button
              android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              android:text="@{user.lastName}"
              android:textSize="25sp" />
      </LinearLayout>
    </layout>

    这里跟平时的布局有点不同,最外层是layout,里面分别是是data以及我们的布局。
    data:声明了需要用到的user对象,type用于是定路径。
    可以在TextView中的看到android:text="@{user.firstName}", 这是什么鬼,没见过这么写的!!!
    (不急,继续往下看)

  • 绑定数据

  • 看看下面的MainActivity
  • public class MainActivity extends AppCompatActivity {
      private ActivityMainBinding binding;
      @Override
      protected void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          binding = DataBindingUtil.setContentView(this, R.layout.activity_main);
          User user = new User("Micheal", "Jack");
          binding.setUser(user);
      }
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值