[Android][DataBinding][DataBinding事件处理(二)]

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对象。如下图


image.png
image.png

你可能感兴趣的:([Android][DataBinding][DataBinding事件处理(二)])