BindingAdapter可以做一些自定義的屬性,解決一些databinding在屬性上的問題。
@BindingAdapter({"attribute_name1"})
public static void methodName(View view,Type type1){
//do something…
}
註解@BindingAdapter("")為View的元件新增使用的屬性,其名稱可以隨意取methodName(View view,Type type)
View為UI,Type是根據你的需求去設定類型(ex:String、Boolean、int等等)。
@BindingAdapter({"attribute_name1","attribute_name2",……})
public static void methodName(View view,Type type1,Type type2,……){
//do something…
}
簡單的實作:按下按鈕前,是灰色的心型,按下按鈕後,會變成粉色的心型
@BindingAdapter("heart")
public static void setHeart(Button button,Boolean colorChange){
if (!colorChange){
button.setBackgroundResource(R.drawable.ic_baseline_favorite_24_grey);
}else{
button.setBackgroundResource(R.drawable.ic_baseline_favorite_24_pink);
}
}
setSrc(Button button,boolean colorChange)
第一個參數是將src屬性新增到button上,每個button都可以使用這個屬性,第二個參數是使用app:heart=
這個屬性時,接收的類型是boolean。
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:onClick="onSendMsg"
android:text="click1"
android:textSize="40sp" />
<Button
android:layout_width="50sp"
android:layout_height="50sp"
android:layout_marginLeft="180dp"
app:heart="@{dataItem.colorChange}" />
這樣能為Button增加一個app:heart=
的屬性
MainActivity2
public class MainActivity2 extends AppCompatActivity{
ActivityMain2Binding main2Binding;
DataItem dataItem;
ClickHandler handler;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
init();
}
private void init() {
main2Binding=DataBindingUtil.setContentView(this,R.layout.activity_main2);
dataItem=new DataItem();
main2Binding.setDataItem(dataItem);
main2Binding.setView(this);
handler=new ClickHandler(MainActivity2.this);
main2Binding.setHandler(handler);
}
public void onSendMsg(View view) {
if (!dataItem.isColorChange()) {
dataItem.setColorChange(true);
Log.d("123", "pink");
}else {
dataItem.setColorChange(false);
Log.d("123", "grey");
}
main2Binding.setDataItem(dataItem);
}
}
成圖:
Log:
BindingAdapter就介紹到此。