DataBinding基础使用二
生活随笔
收集整理的這篇文章主要介紹了
DataBinding基础使用二
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一通過靜態方法轉換數據類型
需要注意靜態方法需要導入包名,當然java中lang包下不用導入包名。
<?xml version="1.0" encoding="utf-8"?><!--布局以layout作為根布局--> <layout xmlns:android="http://schemas.android.com/apk/res/android"><data><variablename="user"type="com.example.administrator.testdatabinding.User" /><!--調用靜態方法,需要先導入需要的包 當然java中的lang包可以不用導包--><import type="com.example.administrator.testdatabinding.Utils" /></data><!--我們需要展示的布局--><LinearLayoutandroid:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><Buttonandroid:id="@+id/main_btn5"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="@{Utils.getName(user)}" /><!--就和java中寫代碼一樣,只要符合數據類型就好--></LinearLayout> </layout>復制代碼public class Utils {public static String getName(Object o) {return o.getClass().getName();} } 復制代碼public class MainActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);ActivityMainBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_main);binding.setUser(new User(""));} }復制代碼二通過運算符操作數據
<?xml version="1.0" encoding="utf-8"?><!--布局以layout作為根布局--> <layout><data><variablename="user2"type="com.example.administrator.testdatabinding.User" /></data><!--我們需要展示的布局--><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"tools:context="www.zhang.com.databinding.MainActivity"><Buttonandroid:id="@+id/main_btn5"android:layout_width="wrap_content"android:layout_height="wrap_content"android:paddingLeft="@{user2.state ? @dimen/largepadding : (int)@dimen/smallpadding}"android:text="@{user2.content ?? @string/app_name}" /><!-- android:text="@{user2.content ?? @string/app_name}"等價于android:text="@{user2.content!=null? user2.content : @string/app_name}"--><Buttonandroid:id="@+id/main_btn6"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="@{`Hello World`+ @string/app_name}" /><!-- ``字符包裹的表示字符串,可用作拼接字符串 --></LinearLayout> </layout>復制代碼package com.example.administrator.testdatabinding;public class User {private String content;private boolean state;public User(String content, boolean state) {this.content = content;this.state = state;}public String getContent() {return content;}public void setContent(String content) {this.content = content;}public boolean isState() {return state;}public void setState(boolean state) {this.state = state;}} 復制代碼public class MainActivity extends AppCompatActivity {private User user2;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);ActivityMainBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_main);//運算符操作user2 = new User("通過運算符操作數據", true);binding.setUser2(user2);binding.mainBtn6.setOnClickListener(view->{user2 = new User(null, false);binding.setUser2(user2);});} }復制代碼三自定義Binding的類名
data標簽有個class屬性,它可以用來對Binding對象重新命名(一般是以布局文件名加上Binding后綴作為該Binding類名)
<data class="com.example.administrator.testdatabinding.activity.Item"><variablename="user2"type="com.example.administrator.testdatabinding.User" /></data>復制代碼這樣代碼中獲取到的就是Item類型
import com.example.administrator.testdatabinding.activity.Item;Item binding = DataBindingUtil.setContentView(this, R.layout.activity_main);復制代碼四綁定相同model的操作
第一種,同一個類的2個對象,只需對象名不同就可以
第二種情況:不同類同名的情況,也是導入不同的包即可(當然有別名的另外一種寫法,這里不不再敘述,因為這種方式更加好理解)
五model變量改變自動更新數據(這可能是我認為它的唯一亮點,但是破壞了面向對象,代碼書寫混亂,犧牲太大)
- notifyPropertyChanged(BR.參數名)通知更新這一個參數,需要與@Bindable注解配合使用。
- notifyChange()通知更新所有參數,可以不用和@Bindable注解配合使用(需要提供set方法)
總結
以上是生活随笔為你收集整理的DataBinding基础使用二的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 记一次代码重构
- 下一篇: JIAVA知识点整理