Databinding 的幾種 click 方式

Databinding 的幾種 click 方式

前提:
有一個(gè) ViewModel 類,有一個(gè) xml,xml 綁定了 ViewModel .

1. @{click}

    //xml:
    <Button
         android:layout_width="match_parent"
         android:layout_height="48dp"
         android:onClick="@{click}"
    />

    //ViewModel:
    public void click(View view){
        //do
    }

?

2. 不帶參數(shù):@{() -> viewModel.click()}

    //xml:
    <Button
         android:layout_width="match_parent"
         android:layout_height="48dp"
         android:onClick="@{() -> viewModel.click()}"
    />

    //ViewModel:
    public void click(){
         //do   
    }

3. @{viewModel::click}

    /xml:
    <Button
         android:layout_width="match_parent"
         android:layout_height="48dp"
         android:onClick="@{viewModel::click}"
    />

    /ViewModel:
    public void click(View view){
        //do
    }

tip: 如果是在其它類中設(shè)置點(diǎn)擊方法,如 EventHandlers.java, 其實(shí)與上面一致

    //xml:
    <variable
        name="handler"
        type="com.xx.xxx.EventHandlers" />

    <Button
         android:layout_width="match_parent"
         android:layout_height="48dp"
         android:onClick="@{handler::click}" />        

//類:綁定handler,如同綁定ViewModel那樣

    EventHandlers handler = new EventHandlers();
    binding.setHandler(handler);

    //EventHandlers
    public void click(View view){
        //do
    }

4. 帶參數(shù):@{() -> viewModel.click(obj.id)}

    /xml:
    <variable
        name="viewModel"
        type="com.xx.xxx.ViewModel" />

    <variable
        name="obj"
        type="com.xx.xxx.User" />

    <Button
         android:layout_width="match_parent"
         android:layout_height="48dp"
         android:onClick="@{() -> viewModel.click(obj.id)}"
    />

    /ViewModel:
    public void click(long id){
         //do   
    }

5. 自定義View中

    /xml:
    <variable
       name="iconView"
       type="com.adsale.ChinaPlas.ui.view.IconView" />

    <RelativeLayout
        android:id="@+id/rl_icon_view"
        android:layout_width="match_parent"
        android:layout_height="55dp"
        android:onClick="@{iconView.clickListener}"
    >    

    /IconView:
    public final ObservableField<OnClickListener> clickListener=new ObservableField<>();

    /xml所在的Activity類:
    binding.iconView.clickListener.set(new View.OnClickListener() {
         @Override
         public void onClick(View v) {
              Toast.makeText(getApplicationContext(),"iconView",Toast.LENGTH_SHORT).show();
     }
    });

6. 帶參數(shù)

     android:onClick="@{()->loadingModel.chooseLang(2)}"
     public void chooseLang(int language) {
            LogUtil.i(TAG, "language=" + language);
     }

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容