美文网首页
DataBinding基本使用(2)

DataBinding基本使用(2)

作者: notrynobug | 来源:发表于2017-09-18 11:27 被阅读0次

    咱们直接点,直接上实战,把常用的标签的用会了,用熟了
    总的有以下几点

    • 数据绑定的几种方式
    • 点击事件绑定的几种方式
    • 双向绑定数据
    • RecycleView的数据绑定
    • @InverseMethod 标签的使用

    大家别急,其他的标签在相应的点里都会应用到

    数据绑定的几种方式

     <variable
                name="tv1data"
                type="String">
    </variable>
    
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical"
            tools:context="com.example.scs.myapplication.MainActivity">
    
            <TextView
                android:id="@+id/tv_1"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="@{tv1data}" />
    
            <TextView
                android:id="@+id/tv_2"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content" />
    
        </LinearLayout>
    
    

    改xml布局文件为MainActivity的
    其实当你编写好布局文件的时候,AS就已经帮你把类和xml之间连接的枢纽类创建好了。

    
        private ActivityMainBinding binding;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
    //        setContentView(R.layout.activity_main);
            binding = DataBindingUtil.setContentView(this, R.layout.activity_main);
    
            binding.setTv1data("tv1_data");//加载数据 way1
            binding.tv2.setText("tv2_data");//加载数据 way2
    }
    

    没错,ActivityMainBinding就是哪个数据,有人会问那么这个类在哪里,那么我有一句话不知当讲不当讲,在基本使用(1)中的贴图,你可以清清楚楚的看到它在哪里。
    我们要通过ActivityMainBinding将Activity和布局稳健想绑定,故我们要注释调它 setContentView(R.layout.activity_main);

    我发现~~~ 自从使用了DataBinding,我们再也不要findviewbyid了,使用BufferKnife不存在的。哈哈其实萝卜青菜 各有所爱。

    方法1:就是传入我们在xml使用的<variable>的数据源,去给对应的View设置数据。setTv1data方法,是系统帮我们生产的。
    方法2:就是利用id,通过ActivityMainBinding来找到对应的View,来给他设置参数

    点击事件绑定的几种方式

    点击的事件对应的方法从哪儿来?从对应的类来。对应的类在哪里?需要我们去写入类对应的地址。
    这不点击事件的绑定不就解决了? 这时候 就需要用到这两个标签 <import><variable>
    1.通过 <import>来导入点击事件所对于的类
    2.通过<variable>已数据的方式来导入点击事件对应的类

    方法1:
    通过variable的方式,去引入一个接口

    public interface IClick {
        void onClick1(View view);
    
        void onClick2(View view);
    
        void onClick3(View view);
    }
    
    <variable
                name="iclick"
                type="com.example.scs.myapplication.IClick"></variable>
    <Button
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:onClick="@{iclick.onClick1}"
                    android:text="点击事件用法2" />
    
     binding.setIclick(new IClick() {
                @Override
                public void onClick1(View view) {
                    Toast.makeText(view.getContext(), "方法1", Toast.LENGTH_SHORT).show();
                }
    
                @Override
                public void onClick2(View view) {
                }
    
                @Override
                public void onClick3(View view) {
                }
            });
    

    方法2:
    还可以在某个类中,定义一个方法,将该类<variable>或者<import>的方式引入

       <variable
                name="main"
                type="com.example.scs.myapplication.MainActivity"></variable>
     <Button
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:onClick="@{main.onBtnChange}"
                         />
    
    public void onBtnChange(View view) {
            Toast.makeText(view.getContext(), "方法2", Toast.LENGTH_SHORT).show();
        }
    
        <import type="com.example.scs.myapplication.MainActivity"></import>
    
       <Button
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:onClick="@{MainActivity.onBtnChange}"
                         />
    

    常用的事件绑定方式就这些。这时候有人会问如果是带参数的方法呢?里面的参数要如何去传递?别急下面就来讲解


    方法3:
    带参数的点击事件

     <variable
                name="iclick"
                type="com.example.scs.myapplication.IClick"></variable>
    
       <import type="android.view.View"></import>
    
       <variable
                name="tv1data"
                type="String"></variable>
    
    <Button
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:text="带参数的方法"
                    android:onClick="@{(view)->iclick.onClick4(view,tv1data)}"/>
         
            binding.setIclick(new IClick() {
           
                @Override
                public void onClick4(View view, String msg) {
                    Toast.makeText(view.getContext(), msg + "", Toast.LENGTH_SHORT).show();
                }
            });
    

    相关文章

      网友评论

          本文标题:DataBinding基本使用(2)

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