美文网首页
DataBinding添加监听

DataBinding添加监听

作者: white_or_black | 来源:发表于2017-09-08 11:46 被阅读0次

这章介绍DataBinding添加监听。如果不了解DataBinding的话,请查看[DataBinding的简单使用]http://www.jianshu.com/p/6d2c63e86de6

今天主要是DataBinding的监听。通过三种方式实现(目前我已经实现的方式,其中主要有1.传统的setOnClickListener() 2.通过调用某一个实体类的方法。3.直接使用Lambda表达式)

传统的setOnClickListener()

1.在xml文件data标签中的配置

<data>

    <!--单击事件-->
    <variable
        name="clickListener"
        type="android.view.View.OnClickListener" />
</data>

2.在Button按钮的实现方式

 <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <!--为button按钮添加点击事件,相当于setOnClickListener(this)-->
        <Button
            android:id="@+id/btn"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentBottom="true"
            android:layout_centerHorizontal="true"
            android:layout_marginBottom="60dp"
            android:onClick="@{clickListener}"
            android:text="btn1" />

    </RelativeLayout>

3.在Activity中的实现

      ActivityMainBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_main);
      binding.setClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                switch (v.getId()) {
                    case R.id.btn:
                        Toast.makeText(MainActivity.this, "click", Toast.LENGTH_SHORT).show();
                        break;
                    default:
                        Toast.makeText(MainActivity.this, "default", Toast.LENGTH_SHORT).show();
                        break;
                }
            }
        });

调用某个实体类的方法实现

1.首先在代码中新建一个类。比如MyHandler.(注意:showToast(View view)必须带参数View)

public class MyHandler {
    public void showToast(View view) {
        switch (view.getId()) {
            case R.id.btn2:
                Toast.makeText(view.getContext(), "btn2", Toast.LENGTH_SHORT).show();
                break;
            case R.id.btn4:
                //  因为我写的MyHandler类是MainActivity的内部类,所以view.getContext()和MainActivity.this是一样的效果。
                Toast.makeText(MainActivity.this, "btn4", Toast.LENGTH_SHORT).show();
                break;
        }
    }
}

2.在xml文件的data标签中的使用

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">

    <data>
      <import type="com.example.administrator.databindingproject.MainActivity.MyHandler" />

        <!--单击事件-->
        <variable
            name="mHandler"
            type="MyHandler" />
    </ata>

</layout>

3.在Button中的使用

<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <!--调用方法里的表达式-->
    <Button
        android:id="@+id/btn2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true"
        android:layout_marginBottom="10dp"
        android:onClick="@{mHandler.showToast}"
        android:text="btn2" />


    <Button
        android:id="@+id/btn4"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true"
        android:layout_marginBottom="160dp"
        android:onClick="@{mHandler.showToast}"
        android:text="btn4" />

</RelativeLayout>

使用LambDa方法实现

其实和方法二差不多,只不过showToast方法里面的参数View并不是必须的,即可以不传参数,也可以传其他的参数,比如String
1.Activity中的代码

public class MyHandler {
   //带String的参数,当然也可以去掉
    public void showToastText(String text) {
        Toast.makeText(MainActivity.this, "btn3  " + text, Toast.LENGTH_SHORT).show();
    }

}

2.在xml文件data标签中的配置

<data>
  <import type="com.example.administrator.databindingproject.MainActivity.MyHandler" />

    <!--单击事件-->
    <variable
        name="mHandler"
        type="MyHandler" />
</ata>

3.在Button中的使用(注意赋值的时候字符的符号)

 <!--lambda表达式-->
        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentBottom="true"
            android:layout_centerHorizontal="true"
            android:layout_marginBottom="120dp"
            android:onClick="@{() -> mHandler.showToastText(`2`)}"
            android:text="btn3" />

完整的代码

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">

    <data>

        <import type="com.example.administrator.databindingproject.MainActivity.MyHandler" />

        <!--单击事件-->
        <variable
            name="clickListener"
            type="android.view.View.OnClickListener" />

        <variable
            name="mHandler"
            type="MyHandler" />

    </data>

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">

     
        <!--为button按钮添加点击事件,相当于setOnClickListener(this)-->
        <Button
            android:id="@+id/btn"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentBottom="true"
            android:layout_centerHorizontal="true"
            android:layout_marginBottom="60dp"
            android:onClick="@{clickListener}"
            android:text="btn1" />

        <!--调用方法里的表达式-->
        <Button
            android:id="@+id/btn2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentBottom="true"
            android:layout_centerHorizontal="true"
            android:layout_marginBottom="10dp"
            android:onClick="@{mHandler.showToast}"
            android:text="btn2" />


        <Button
            android:id="@+id/btn4"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentBottom="true"
            android:layout_centerHorizontal="true"
            android:layout_marginBottom="160dp"
            android:onClick="@{mHandler.showToast}"
            android:text="btn4" />

        <!--lambda表达式-->
        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentBottom="true"
            android:layout_centerHorizontal="true"
            android:layout_marginBottom="120dp"
            android:onClick="@{() -> mHandler.showToastText(`2`)}"
            android:text="btn3" />

    </RelativeLayout>

</layout>

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //获取binding
        ActivityMainBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_main);

        //以下两种方式都可以实现MyHandler的绑定
        binding.setMHandler(new MyHandler());
        //binding.setVariable(BR.mHandler, new MyHandler());

        binding.setClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                switch (v.getId()) {
                    case R.id.btn:
                        Toast.makeText(MainActivity.this, "click", Toast.LENGTH_SHORT).show();
                        break;
                    default:
                        Toast.makeText(MainActivity.this, "default", Toast.LENGTH_SHORT).show();
                        break;
                }
            }
        });


    }

    public class MyHandler {

        public void showToast(View view) {
            switch (view.getId()) {
                case R.id.btn2:
                    Toast.makeText(MainActivity.this, "btn2", Toast.LENGTH_SHORT).show();
                    break;
                case R.id.btn4:
                    Toast.makeText(MainActivity.this, "btn4", Toast.LENGTH_SHORT).show();
                    break;
            }
        }

        public void showToastText(String text) {
            Toast.makeText(MainActivity.this, "btn3  " + text, Toast.LENGTH_SHORT).show();
        }

    }

}

相关文章

网友评论

      本文标题:DataBinding添加监听

      本文链接:https://www.haomeiwen.com/subject/rgsgjxtx.html