JetPack Databing 事件綁定無反應及解決方法

使用

先看完整的邏輯

1.代碼


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
//        setContentView(R.layout.activity_main);

        binding = DataBindingUtil.setContentView(this, R.layout.activity_main);
        final Presenter presenter = new Presenter();
        binding.setMsg("hhhhhh");
        binding.setPresenter(presenter);
    }

2.xml

android:onClick="@{()-> presenter.handler(msg)}" 這句根據gradle插件不同,使用不同的方式。如: android:onClick="@{handlers.showToast}"。但是新的Androidstdudio版本使用的高版本的Gradle插件,好像都是使用lamda表達式,看來這是趨勢。


    <data>
        <variable
            name="presenter"
            type="com.example.myapplication.Presenter" />
...
        <Button
            android:id="@+id/click"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"

            android:onClick="@{()-> presenter.handler(msg)}"
            android:text="點擊+1" />


還有如果你想傳當前view 作爲參數:

 android:onClick="@{(view)-> presenter.handler(view,msg)}"

這樣就能傳入當前view 進入邏輯了。

3.對象類

public class Presenter {

    public void handler(String msg){

        Log.d("Presenter", "onClick: "+msg);
    }
}

總結:

整體邏輯不難,當時在activity裏少了一句 binding.setPresenter(presenter);官方文檔也沒有提示。我們在xml 聲明和引入了presenter,但是我們需要構建一個presenter對象,來通過xml的綁定類傳入到佈局裏一個presenter,這樣xml的presenter對象纔有實際意義。因此才能調用成功。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章