日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

DataBinding基础使用二

發布時間:2024/1/17 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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個對象,只需對象名不同就可以

第二種情況:不同類同名的情況,也是導入不同的包即可(當然有別名的另外一種寫法,這里不不再敘述,因為這種方式更加好理解)

<?xml version="1.0" encoding="utf-8"?><!--布局以layout作為根布局--> <layout xmlns:android="http://schemas.android.com/apk/res/android"><data><!--只要name不一樣,就可以區分同類不同對象的問題--><variablename="user1"type="com.example.administrator.testdatabinding.User" /><variablename="user2"type="com.example.administrator.testdatabinding.User" /></data><!--我們需要展示的布局--><LinearLayout android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><Buttonandroid:id="@+id/main_btn7"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="@{user1.content}" /><Buttonandroid:id="@+id/main_btn8"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="@{user2.content}" /></LinearLayout> </layout>復制代碼public class MainActivity extends AppCompatActivity {private User user1;private User user2;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);ActivityMainBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_main);//運算符操作user1 = new User("通過運算符操作數據", true);user2 = new User("eeeeeeee", true);binding.setUser1(user1);binding.setUser2(user2);;} }復制代碼

五model變量改變自動更新數據(這可能是我認為它的唯一亮點,但是破壞了面向對象,代碼書寫混亂,犧牲太大)

  • notifyPropertyChanged(BR.參數名)通知更新這一個參數,需要與@Bindable注解配合使用。
  • notifyChange()通知更新所有參數,可以不用和@Bindable注解配合使用(需要提供set方法)
<?xml version="1.0" encoding="utf-8"?><!--布局以layout作為根布局--> <layout xmlns:android="http://schemas.android.com/apk/res/android"><data><variablename="person"type="com.example.administrator.testdatabinding.Person" /></data><!--我們需要展示的布局--><LinearLayoutandroid:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><TextViewandroid:layout_width="match_parent"android:layout_height="56dp"android:text="@{`firstName:`+person.firstName}" /><TextViewandroid:layout_width="match_parent"android:layout_height="56dp"android:text="@{`lastName:`+person.lastName}" /><TextViewandroid:layout_width="match_parent"android:layout_height="56dp"android:text="@{`age:`+person.age}" /><Buttonandroid:id="@+id/second_btn1"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="改變數據" /></LinearLayout> </layout>復制代碼package com.example.administrator.testdatabinding;import android.databinding.BaseObservable; import android.databinding.Bindable;public class Person extends BaseObservable {private String firstName;private String lastName;private int age;public Person(String firstName, String lastName, int age) {this.firstName = firstName;this.lastName = lastName;this.age = age;}public void setFirstName(String firstName) {this.firstName = firstName;//刷新代碼,需要結合注解:@BindablenotifyPropertyChanged(BR.firstName);}public void setLastName(String lastName) {this.lastName = lastName;//刷新代碼,需要結合注解:@BindablenotifyPropertyChanged(BR.lastName);}public void setAge(int age) {this.age = age;//刷新代碼,需要結合注解:@BindablenotifyPropertyChanged(BR.age);}@Bindablepublic String getFirstName() {return firstName;}@Bindablepublic String getLastName() {return lastName;}@Bindablepublic int getAge() {return age;} } 復制代碼public class MainActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);ActivityMainBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_main);final Person person = new Person("zhang", "san", 38);//這里可以直接通過這個去刷新UIbinding.setPerson(person);binding.secondBtn1.setOnClickListener(view -> {//這里是改變的部分屬性,也會讓Ui刷新,并且是在子線程里邊進行刷新UInew Thread(new Runnable() {@Overridepublic void run() {person.setFirstName("li");person.setLastName("si");person.setAge(40);}}).start();});} } 復制代碼


總結

以上是生活随笔為你收集整理的DataBinding基础使用二的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。