按照官方文檔綁定點擊事件,佈局一個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();
}
}
此時佈局文件已經報錯了。
WTF?官方文檔上也是這樣寫的啊
我的Android Studio 版本2.1.1 gradle 2.1.0
爲什麼會報錯呢。
會不會是Android Studio 版本的問題呢?
於是我就使用Android Studio 3.0.1 發現佈局代碼不報錯了。
運行程序,點擊按鈕沒有效果。
怎麼辦呢怎麼辦呢,只能各種查資料。
解決辦法是在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();
}
}
重新運行程序,點擊事件觸發。
那還有個問題,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);
然後運行即可。