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就演示完毕了 , 假设须要更深入理解及扩展请訪问 安卓开发官方文档 *

  • 相关阅读:
    HDU 5938 Four Operations 【贪心】(2016年中国大学生程序设计竞赛(杭州))
    HDU 5935 Car 【模拟】 (2016年中国大学生程序设计竞赛(杭州))
    HDU 5934 Bomb 【图论缩点】(2016年中国大学生程序设计竞赛(杭州))
    HDU 5933 ArcSoft's Office Rearrangement 【模拟】(2016年中国大学生程序设计竞赛(杭州))
    HDU 5929 Basic Data Structure 【模拟】 (2016CCPC东北地区大学生程序设计竞赛)
    【转】LaTeX 符号命令大全
    HDU 5922 Minimum’s Revenge 【模拟】 (2016CCPC东北地区大学生程序设计竞赛)
    HDU 5927 Auxiliary Set 【DFS+树】(2016CCPC东北地区大学生程序设计竞赛)
    数据结构之稀疏矩阵
    C++中引用(&)的用法和应用实例
  • 原文地址:https://www.cnblogs.com/gcczhongduan/p/5039436.html
Copyright © 2011-2022 走看看