zoukankan      html  css  js  c++  java
  • Android

    文章引用: https://developer.android.com/intl/zh-cn/tools/data-binding/guide.html

      1. 什么是MVVM设计模式
    MVVM 模式将 MVP模式中的Presenter 改名为 ViewModel,基本上与 MVP 模式全然一致。

    唯一的差别是。它採用双向绑定(data-binding):View的变动,自己主动反映在 ViewModel,反之亦然。

    Angular 和 Ember 都採用这样的模式。
    这里写图片描写叙述

      2. Data-Binding介绍
    这篇文章介绍了怎样使用Data Binding库来写声明的layouts文件,而且用最少的代码来绑定你的app逻辑和layouts文件。
    Data Binding库不仅灵活而且广泛兼容- 它是一个与support在同一文件夹下的库 , 谷歌把support库外面又加了一层”exploded-aar” , 这个与support库的功能是一样的,因此你能够在全部的Android平台最低能到Android 2.1(API等级7+)上使用它。
    这里写图片描写叙述
      3. 构建环境
    注 : 须要Android Studio 1.3.0-beta1 或更高版本号;

    ① 项目文件的build.gradle加入例如以下:

        dependencies {
            classpath "com.android.tools.build:gradle:1.3.0-beta1"
            classpath "com.android.databinding:dataBinder:1.0-rc0"
        }

    ② 在每个你想要使用Data Binding的module,加入例如以下的插件(第一行默认):

    apply plugin: 'com.android.application'
    apply plugin: 'com.android.databinding'
      4. 填写布局文件
    这里布局文件根节点为layout , 内部包括data 节点 , 数据中 variable 代表变量 , type 代表变量类型
        <?

    xml version="1.0" encoding="utf-8"?> <layout xmlns:android="http://schemas.android.com/apk/res/android"> <data> <variable name="user" type="com.example.User"/> </data> <LinearLayout android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@{user.firstName}"/> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@{user.lastName}"/> </LinearLayout> </layout>

      5. 布局具体解释

    ① 在data 内声明了一个user的变量 , 类型一定要写类的全路径名( 这里系统要利用反射 )

    <variable name="user" type="com.example.User"/>

    ② 在子View的text属性写表达式@{} , 以下的属性为user的firstName:

    <TextView android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              android:text="@{user.firstName}"/>
      6. 数据Data
    * 注 : user的firstName和lastName属性必须是不变的(final) .*

    ① 属性为public方式创建User:

    public class User {
       public final String firstName;
       public final String lastName;
       public User(String firstName, String lastName) {
           this.firstName = firstName;
           this.lastName = lastName;
       }
    }

    ② 属性为private方式创建User:

    public class User {
       private final String firstName;
       private final 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;
       }
    }

    * 这样的私有属性方式创建的User , @{user.firstName} 訪问的是User对象的getFirstName()方法 , 而上一中公用属性 则訪问的是firstName属性 , 所以Bean中的set和get方法一定要严格依照规范来写*

      7. Activity中绑定数据

    默认情况下,一个Binding类会基于layout文件的名称而产生,将其转换为Pascal case(译注:首字母大写的命名规范)而且加入“Binding”后缀。

    上述的layout文件是activity_main.xml。因此生成的类名是ActivityMainBinding。此类包括从layout属性到layout的Views中全部的bindings(比如user变量)。而且它还知道怎样给Binding表达式分配数值。

    创建bindings的最简单的方式是在inflating(译注:layout文件与Activity/Fragment的“链接”)期间例如以下:

    @Override
    protected void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       ActivityMainBinding binding = DataBindingUtil.setContentView(this, R.layout.main_activity);
       User user = new User("Test", "User");
       binding.setUser(user);
    }

    或者你能够通过例如以下获取View:

    MainActivityBinding binding = MainActivityBinding.inflate(getLayoutInflater());
    

    假设你在ListView或者RecyclerView adapter使用Data Binding时,你可能会使用:

    ListItemBinding binding = ListItemBinding.inflate(layoutInflater, viewGroup,false);
    //or
    ListItemBinding binding = DataBindingUtil.inflate(layoutInflater, R.layout.list_item, viewGroup, false);
    * 到这里Demo就演示完毕了 , 假设须要更深入理解及扩展请訪问 安卓开发官方文档 *

  • 相关阅读:
    第27篇-虚拟机字节码指令之操作数栈管理指令
    第26篇-虚拟机对象操作指令之putstatic
    第25篇-虚拟机对象操作指令之getfield
    第24篇-虚拟机对象操作指令之getstatic
    第23篇-虚拟机字节码指令之类型转换
    第22篇-虚拟机字节码之运算指令
    第20篇-加载与存储指令之ldc与_fast_aldc指令(2)
    第19篇-加载与存储指令(1)
    第18章-x86指令集之常用指令
    第17章-x86-64寄存器
  • 原文地址:https://www.cnblogs.com/gcczhongduan/p/5039436.html
Copyright © 2011-2022 走看看