1.DataBinding对View的事件处理
DataBinding允许你为控件通过写表达式来传递事件,表达式必须是控件分发事件(例如 onClick)。 事件名称必须使用官方的监听方法的名称。 例如View.OnLongClickListener有一个方式是onLongClick(),所以这个事件的属性必须是:android:onLongClick.这里有两条途径来传递事件:
• 方法引用(Method References):在你的表达式中你可以直接引用监听器的方法。当你引用方法时,DataBinding将会将引用方法和它所属的类包裹起来,并指定给目标控件。如果表达式的值为空,DataBinding不会创建方法并指定一个空的listener给控件。
• 监听绑定(Listener Bindings):使用lambda表达式来绑定事件。DataBinding也会创建一个监听器并指定给控件。当事件分发时,监听器会解析lambda表达式。
一开始我并没有使用上面两种方式来处理事件,而是用以前习惯的处理方式,在Activity里完成对事件的处理。如下:
package com.tan.lgy.testdatabinding.sampleOne;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
final ActivityMainBinding binding = DataBindingUtil.setContentView(this,R.layout.activity_main2);
User user = new User("鲑鱼","梁");
binding.setUser(user);
binding.getUser();
binding.submit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String first = binding.firstNameEdit.getText().toString();
String last = binding.lastNameEdit.getText().toString();
if(!"".equals(first)&&!"".equals(last))
{
binding.firstName.setText(first);
binding.lastName.setText(last);
}
}
});
}
}
代码中的User对象并没有被监听(也就是没有继承BaseObservable),它只是一个简单的JavaBean。而通过对应的XXBinding对象,我们可以通过View的id拿到对应的View对象。如下图