Android d-DataBind使用

7986 ワード

> Android https://developer.android.com/tools/data-binding/guide.html   
http://blog.zhaiyifan.cn/2016/06/16/android-new-project-from-0-p7/ https://github.com/LyndonChin/MasteringAndroidDataBinding/blob/master/README.md#rd https://www.aswifter.com/2015/07/11/android-data-binding-example/ プロジェクトの住所
MVVM
MVC-』MVP-」MVM開発モードの移行。
Androidでの利点は、MVPを使用した後にp層がデータを持ってview層の修正インターフェースを呼び出したり、データ修正p層通知ビューが修正されたりしています。いくつかの操作が多くなりました。MVMはステップの欠点と結合性が高くなり、再構成に不利です。
DataBind
Data Bindingは、名前の通り、データバインディングは、GoogleがMVVMに対してAndroid上での実現であり、直接にデータをxmlに結びつけて、自動的に更新することができます。
使用
moduleのgradleで構成をして、Androidのgradleバージョンは1.5-alpha 1を下回ってはいけません。
dataBinding {
    enabled true
}
第一歩
public class User {
    private final String Name;


    public User(String Name) {
        this.Name= Name;
    }

    public String getName() {
        return Name;
    }
}
mvpやmvcでtextViewにユーザーの名前を表示させるには、コードコール、text.set Text(user.get Name()などの操作はdatabindの操作で少なくなります。
二番目のステップはxmlにファイルを設定します。
<layout xmlns:android="http://schemas.android.com/apk/res/android">
    <data>
    data>
    
    <LinearLayout>
    ....
    LinearLayout>
layout>

LinearLayout            ,        ,      layout,     data    
DataBindを使用した後、xmlのレイアウトは単にUIを展示するのではなく、UI要素用変数も必要です。dataはviewとmodelの関係を構築するようになりました。
第三ステップは、どのオブジェクトまたは要素を使ってdataに書くかをレイアウトに教えます。
<data>
    "user" type="com.hotel.sf.databinddemo.User" />
data>import   
<data>
    <import type="com.hotel.sf.databinddemo.User" />
    "user" type="User" />
data>
第四歩
viewとmodelを結合する
<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@{user.name}" />
      
    <TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@{user.getName()}" />
第五段階のData BindingUtil.set ContintViewはset ContteViewに取って代用されました。MainActivityで使用すれば、
 ActivityMainBinding  viewDataBinding = DataBindingUtil.setContentView(this,R.layout.activity_main);
   user = new User("xiaoming");
   viewDataBinding.setUser(user);
空のポインター
textview.settext(null)は他の空いているポインタを取得し、xmlでも関連する論理判断(三元演算子)ができます。
android:text="@{user.displayName != null ? user.displayName : user.lastName}"
  
android:text="@{user.displayName ?? user.lastName}"
viewに属性を設定することもできます。
"@{user.name}"
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   android:visibility="@{user.isAdult ? View.VISIBLE : View.GONE}"/>
単方向結合
上の設定は、あなたのコードがユーザーの属性を変更した時、自動的に属性上の変更を行いません。ユーザーがデータを修正する時にレイヤーを見ても自動的に修正してほしいです。
Observable Bindingを実現するには、まず一つのimplementがインターフェースandroid.databinding.Observableのクラスを持つ必要があります。便利さのために、Android原生はすでにパッケージされているクラス-BaseObservableを提供し、モニターの登録機構を実現しました。
public class User extends BaseObservable  {
    private String name;
      public final String defalutName = "    ";

    public User(String name) {
        this.name= name;
    }
    public void setFirstName(String firstName) {
        this.firstName = firstName;
        notifyPropertyChanged(com.hotel.sf.databinddemo.BR.firstName);
    }

    @Bindable
    public String getFirstName() {
        return firstName;
    }

    public String getLastName() {
        return lastName;
    }
}
                    

     ,Bindable   BR        Entry。BR           。    Data        ,Observable       PropertyChangeRegistry                。
時間を節約したいなら、Observableフィールドを使ってもいいです。これを使うには、public finalを作成する必要があります。
public class User extends BaseObservable {
    public final ObservableField name =
            new ObservableField<>();
}
            
   user.name.set("  ");
   user.name.get()