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);
然后运行即可。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章