Overview
數據綁定庫與 Android Gradle 插件捆綁在一起。您無需聲明對此庫的依賴項,但必須啟用它。
啟用的方法為:
在我們的app/build.gradle下添加如下代碼:
android{
dataBinding{
enabled=true
}
}
如何在布局文件中使用
先是看看我們的代碼:
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<data>
<variable
name="user"
type="com.example.android_databingding_learn.UserInfo" />
</data>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#E3F2FD"
android:orientation="vertical"
android:paddingStart="3dp">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="3dp"
android:text="@{user.id}"
android:textColor="@android:color/black"
android:textSize="16sp"
android:textStyle="bold" />
<TextView
android:id="@+id/itemLayout_txtName"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="3dp"
android:text="@{user.name}"
android:textColor="@android:color/black"
android:textSize="16sp"
android:textStyle="bold" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="3dp"
android:text="@{user.gender}"
android:textColor="@android:color/black"
android:textSize="16sp"
android:textStyle="bold" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="3dp"
android:text="@{user.age}"
android:textColor="@android:color/black"
android:textSize="16sp"
android:textStyle="bold" />
</LinearLayout>
</layout>
這樣我們的layout布局文件就完成了。
來分析一下:
這樣我們的數據綁定等操作就完成了。
看看我們的適配器是如何操作的
/**
* Date 5/3/2020
* Author CaoJiaHao
* Description DataBinding X BaseAdapter
**/
public class MainAdapter extends BaseAdapter {
private Context mContext;
private List<UserInfo> usersList;
public MainAdapter(Context mContext, List<UserInfo> usersList) {
this.mContext = mContext;
this.usersList = usersList;
}
@Override
public int getCount() {
return usersList.size();
}
@Override
public Object getItem(int i) {
return usersList.get(i);
}
@Override
public long getItemId(int i) {
return i;
}
@Override
public View getView(final int i, View view, ViewGroup viewGroup) {
ItmeLayoutBinding binding;
if (view == null) {
binding = DataBindingUtil.inflate(LayoutInflater.from(this.mContext), R.layout.itme_layout, viewGroup, false);
view = binding.getRoot();
view.setTag(binding);
//綁定我們的點擊事件
view.findViewById(R.id.itemLayout_txtName).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(mContext, usersList.get(i).getName(), Toast.LENGTH_SHORT).show();
}
});
} else {
binding = (ItmeLayoutBinding) view.getTag();
}
binding.setVariable(BR.user, usersList.get(i));
return view;
}
}
這樣我們的操作就完成了。來分析一下:
這個就是我們的適配器代碼,其他的代碼和正常的適配器沒有啥區別。
如何使用這個適配器
使用他的話就和我們使用普通的適配器是一樣的。看看代碼:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
List<UserInfo> usersList = new ArrayList<>();
int a = 30;
for (int i = 0; i < a; i++) {
UserInfo userInfo = new UserInfo(String.valueOf(i), "GreatCoder", "Male", "17");
usersList.add(userInfo);
}
ListView listview = this.findViewById(R.id.main_ListVew);
listview.setAdapter(new MainAdapter(this, usersList));
}
就是這么的簡單。看看我們的運行效果圖:
可以看到前面還有相關標識。
如何在綁定值中進行字符串拼接
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="3dp"
android:text='@{@string/age+user.age}'
android:textColor="@android:color/black"
android:textSize="16sp"
android:textStyle="bold" />
這個就是我所使用的方法。是引用string中的值。但是需要注意的是!
不推薦!!這樣去寫:
android:text='@{"年齡: "+user.age}'
為啥不推薦怎么寫?以為在DataBinding中如果出現錯誤,軟件不會指向錯誤的地方。后期排查工作量非常的大。
DataBinding的坑
- 在使用適配器的時候
BR報錯
或者是無法找到引用名稱如user。
如何解決:
就是注意我們的實體類的命名,名字的第一個字母需要大寫。不然你就會非常的難受,別問我為啥知道。