按照官方文档绑定点击事件,布局一个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);
然后运行即可。