DataBinding基本使用(2)

来源:互联网 发布:淘宝晚礼服推荐 编辑:程序博客网 时间:2024/06/05 01:57

咱们直接点,直接上实战,把常用的标签的用会了,用熟了
总的有以下几点
- 数据绑定的几种方式
- 点击事件绑定的几种方式
- 双向绑定数据
- 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使用的的数据源,去给对应的View设置数据。setTv1data方法,是系统帮我们生产的。
方法2:就是利用id,通过ActivityMainBinding来找到对应的View,来给他设置参数

点击事件绑定的几种方式

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

方法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            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();            }        });

若有错误的地方,请指出,大家共同进步!

原创粉丝点击