1 绑定事件
上代码:
事件处理MyHandlers类:
package com.example.ethan.bindingmethod;
public class MyHandlers {
public void onClickFriend(View view) {
Toast.makeText(view.getContext(), "Friend", Toast.LENGTH_SHORT).show();
}
public void onClickEnemy(View view) {
Toast.makeText(view.getContext(), "Friend", Toast.LENGTH_SHORT).show();
}
}
XML文件:
<data>
<import type="com.example.ethan.bindingmethod.MyHandlers"/>
<variable
name="handler"
type="MyHandlers"/>
</data>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal">
<TextView
android:background="#0ff"
android:layout_width="0dp"
android:layout_height="60dp"
android:layout_weight="1"
android:onClick="@{handler.onClickFriend}"//没有带()
android:text="Friend"/>
<TextView
android:background="#ff0"
android:layout_width="0dp"
android:layout_height="60dp"
android:layout_weight="1"
android:onClick="@{handler.onClickEnemy}"
android:text="Enemy"/>
</LinearLayout>
MainActivity中的代码:
ActivityMainBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_main);
binding.setHandler(new MyHandlers());
从上面可以看出,在调用事件处理方法的时候只需要用”实例对象.方法名”,不带括号!同样的后面的绑定方法也是如此。
另外需要补充的是,不同的点击事件有不同处理。如下所示:
2 绑定方法
1 静态方法
工具类代码:
package util;
public class StringUtil {
public static String toUppercase(String oriStr) {
return oriStr.toUpperCase();
}
}
XML文件:
<import type="util.StringUtil"/>
...
<TextView
android:layout_width="0dp"
android:layout_height="60dp"
android:layout_weight="1"
android:background="#0ff"
android:onClick="@{handler.onClickFriend}"
android:text="@{StringUtil.toUppercase(user.name)}"/>
可以看出,绑定静态的方法只需要进行导包,随后直接用类名调用方法,带括号!带参数!(可以试试把user.name替换为abcd或者”abcd”,有惊喜~)
2 一般方法
可以参考上面“绑定事件”中事件处理的调用。简言之,实例对象+方法名,不带括号!
3 小结
- 绑定事件需要根据不同的事件进行不同的绑定;
- 绑定方法其实和往常基本一致,唯一的区别就是用实例调用一般方法时不需要带括号。