iT邦幫忙

2021 iThome 鐵人賽

DAY 13
0
Mobile Development

android studio 30天學習筆記系列 第 13

android studio 30天學習筆記-day 13-介紹databinding BindingAdapter

  • 分享至 

  • xImage
  •  

BindingAdapter可以做一些自定義的屬性,解決一些databinding在屬性上的問題。

BindingAdapter的格式

單個參數

@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… 
}  

ClickHandler.class創建一個自定義BindingAdapter

簡單的實作:按下按鈕前,是灰色的心型,按下按鈕後,會變成粉色的心型

@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);
    }
}

成圖:
https://ithelp.ithome.com.tw/upload/images/20210928/20138966OTLypiwI3G.jpg
https://ithelp.ithome.com.tw/upload/images/20210928/20138966A8HIxgWuxK.jpg
Log:
https://ithelp.ithome.com.tw/upload/images/20210928/20138966zxXnrbiD0F.png
BindingAdapter就介紹到此。


上一篇
android studio 30天學習筆記-day 12-介紹databinding(二)
下一篇
android studio 30天學習筆記-day 14-databinding 單向綁定
系列文
android studio 30天學習筆記30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言