DataBinding事件绑定【二】

来源:互联网 发布:代理商域名转到阿里云 编辑:程序博客网 时间:2024/06/05 20:20

DataBinding事件绑定有两种方式
Method References(方法引用)和Listener Bindings(事件监听)
就先view设置点击事件也有两种方式view.setOnClickListener(View view)以及在XML中定义android:onClick=”“。
简单运行了textview和button的点击效果如下:
这里写图片描述

//XML代码如下<?xml version="1.0" encoding="utf-8"?><layout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools">    <data>        <!--绑定数据-->        <variable            name="testBean"            type="com.example.minwenping.databindingdemo.TestBean" />        <!--绑定事件-->        <variable            name="eventListener"            type="com.example.minwenping.databindingdemo.MainActivity.ListenerBinding" />    </data>    <LinearLayout        android:layout_width="match_parent"        android:layout_height="match_parent"        android:orientation="vertical"        tools:context="com.example.minwenping.databindingdemo.MainActivity">        <!--备注先绑定之后在写数据或者事件-->        <TextView            android:layout_width="match_parent"            android:layout_height="40dp"            android:gravity="center"            android:onClick="@{eventListener::onClickText}"            android:text="@{testBean.tvText}" />        <Button            android:layout_width="match_parent"            android:layout_height="60dp"            android:layout_marginTop="16dp"            android:onClick="@{() -> eventListener.onTextChanged(testBean) }"            android:text="@{testBean.btnText}" />    </LinearLayout></layout>//Activity代码public class MainActivity extends AppCompatActivity {    TestBean bean = new TestBean("text新数据", "buttonXinshuju");    private ActivityMainBinding dataBinding;     @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        //contentview都绑定这里        dataBinding = DataBindingUtil.setContentView(this, R.layout.activity_main);        dataBinding.setTestBean(bean);        //第二种写法//        dataBinding.setVariable(BR.testBean,bean);        dataBinding.setEventListener(new ListenerBinding());    }    //事件方法引用    public class ListenerBinding {        //Method References方法直接引用类,但是参数规定死了        public void onClickText(View v) {            Toast.makeText(MainActivity.this, "点击:"+ ((TextView) v).getText(), Toast.LENGTH_SHORT).show();        }        //Listener Bindings 能够自定义传参数,比较灵活        public void onTextChanged(TestBean testBean){            testBean.setTvText("Listener Bindings 能回传参数");            dataBinding.setTestBean(testBean);        }    }}

注意:第二种方式的事件监听有Java8的lambda 表达式。

原创粉丝点击