DataBinding基本使用(2)

2017-09-18  本文已影响0人  notrynobug

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

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

数据绑定的几种方式

 <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();
            }
        });
上一篇下一篇

猜你喜欢

热点阅读