DataBinding 綁定點擊事件無效解決

DataBinding官方文檔

按照官方文檔綁定點擊事件,佈局一個button data中定義name 和導入 type

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
    <data>
        <variable
            name="handlers"
            type="com.example.databinding.BoundActivity"/>
    </data>
    <LinearLayout
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:padding="5dp"
        >
        <Button
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="點我點我"
            android:onClick="@{handlers::showToast}"
            />

    </LinearLayout>
</layout>

Activity

public class BoundActivity extends AppCompatActivity {

    private ActivityBoundBinding mActivityBoundBinding;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        mActivityBoundBinding = DataBindingUtil.setContentView(this, R.layout.activity_bound);
    }
    public void showToast(View view){
        Toast.makeText(view.getContext(),"哪裏不會點哪裏",Toast.LENGTH_LONG).show();
    }
}

此時佈局文件已經報錯了。
click1.png
WTF?官方文檔上也是這樣寫的啊
click2.png
我的Android Studio 版本2.1.1 gradle 2.1.0
爲什麼會報錯呢。
會不會是Android Studio 版本的問題呢?
於是我就使用Android Studio 3.0.1 發現佈局代碼不報錯了。
click3.png
運行程序,點擊按鈕沒有效果。
click4.gif

怎麼辦呢怎麼辦呢,只能各種查資料。
解決辦法是在onCreate()方法中調用ActivityBoundBinding的set方法。

public class BoundActivity extends AppCompatActivity {

    private ActivityBoundBinding mActivityBoundBinding;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        mActivityBoundBinding = DataBindingUtil.setContentView(this, R.layout.activity_bound);

        mActivityBoundBinding.setHandlers(this);
    }
    public void showToast(View view){
        Toast.makeText(view.getContext(),"哪裏不會點哪裏",Toast.LENGTH_LONG).show();
    }
}

重新運行程序,點擊事件觸發。
click5.gif

那還有個問題,Android studio 2.1.1版本下語法錯誤如何解決呢?

將兩個冒號去掉,使用 . 來代替:

 <Button
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="點我點我"
            android:onClick="@{handlers.showToast}"
            />
當然Activity中也不能少了  mActivityBoundBinding.setHandlers(this);
然後運行即可。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章