美文网首页
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