美文网首页Android开发经验谈Android开发
最简单的安卓databinding接入教程

最简单的安卓databinding接入教程

作者: 克拉丶 | 来源:发表于2018-07-09 18:11 被阅读21次

1.model的buildgradle加

android {
    ....
    dataBinding {
        enabled = true
    }

}

2.创建你所需要的model

public class DataBindModel extends BaseObservable{
//继承BaseObservable使其参与编译时生成对应的字段
    private  String firstName;
    private  String lastName;

    @Bindable
    public String getFirstName() {
        return this.firstName;
    }

    @Bindable
    public String getLastName() {
        return this.lastName;
    }

    public void setFirstName(String firstName) {
        this.firstName = firstName;
        //下行代码实现set时动态刷新ui, BR后面的字段需要编译后产生
        notifyPropertyChanged(BR.firstName);
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
        notifyPropertyChanged(BR.lastName);
    }
}

3.布局文件中改为 <layout> </layout>

编译器会自动生成对应的binding类

Binding和局文件名有关,以大写字母+(移除下划线的)字母 + “Binding”后缀

<layout  xmlns:android="http://schemas.android.com/apk/res/android">
    <data>
        <variable
            //name是自己定义的可以随意修改
            name="user"
            //type的位置就是你model所在的位置
            type="com.practice.mymvvmproject.DataBindModel"/>
        
    </data>
    <LinearLayout
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            //这是根据model自动编译生成的字段
            android:text="@{user.firstName}"/>
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            //这是根据model自动编译生成的字段
            android:text="@{user.lastName}"/>
        <Button
            android:id="@+id/click"
            android:text="dataBing"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
    </LinearLayout>
</layout>

3.在对应的Activity中绑定对应的model

public class DataBindActivity extends Activity {

    private ActivityDatabindBinding activityDatabindBinding;
    public int i = 0;
    public DataBindModel dataBindModel;
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        activityDatabindBinding = DataBindingUtil.setContentView(this, R.layout.activity_databind);
        dataBindModel = new DataBindModel();
        activityDatabindBinding.setUser(dataBindModel);
        dataBindModel.setFirstName("这是第一种用法firstName");
        dataBindModel.setLastName("这是第一种用法lastName");
        //这里的click是xml定义的button的id
        Button click = activityDatabindBinding.click;
        click.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                dataBindModel.setFirstName("这是第一种用法firstName" + i++);
            }
        });
    }
}

至此databind的基本数据绑定就完成了

下面是一些其他的用法

1.是不是感觉model写的东西很多,很麻烦?试试下面这种写法

public class DataBindModel2 extends BaseObservable{
    public ObservableField<String> firstName = new ObservableField<>();
    public ObservableField<String> lastName = new ObservableField<>();
}

通过继承BaseObservable 创建对应的ObservableField可以实现上面model的全部功能啦。
==并且支持多重数据格式如ObservableChar, ObservableShort, ObservableInt等等==

调用方式变为

        DataBindModel2 dataBindModel2 = new DataBindModel2();
        dataBindModel2.firstName.set("这是第二种用法firstName");
        dataBindModel2.lastName.set("这是第二种用法lastName");

记得在xml中更改对应的model哦~

2.在listVIew Grideview等中的用法

这当然是必不可少的知识啦~

1.创建model,方便起见就用之前的model

2.定义RecyclerView的item布局

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
    <data>
        <variable
            name="user"
            type="com.practice.mymvvmproject.DataBindModel"/>
    </data>

    <LinearLayout
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="40dp">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@{user.firstName}"/>
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@{user.lastName}"/>

    </LinearLayout>
</layout>

3.创建RecyclerView对应的adapter

public class DataBindAdapter extends RecyclerView.Adapter<DataBindAdapter.ViewHolder> {

    private List<DataBindModel> listBeen;
    private Context context;

    public DataBindAdapter(List<DataBindModel> listBeen, Context context) {//构造函数要数据跟上下文
        this.listBeen = listBeen;
        this.context = context;
    }

    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        ItemListBinding binding = DataBindingUtil.inflate(LayoutInflater.from(context), R.layout.item_list,
                parent, false);
        return new ViewHolder(binding.getRoot());
    }

    @Override
    public void onBindViewHolder(ViewHolder holder, int position) {
        ItemListBinding binding = DataBindingUtil.getBinding(holder.itemView);
        binding.setUser(listBeen.get(position));
        binding.executePendingBindings();
    }

    @Override
    public int getItemCount() {
        return listBeen.size();
    }

    public static class ViewHolder extends RecyclerView.ViewHolder {

        public ViewHolder(View itemView) {
            super(itemView);
        }
    }
}

4.创建activity的布局

<?xml version="1.0" encoding="utf-8"?>
<layout>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">

        <android.support.v7.widget.RecyclerView
            android:id="@+id/recylerView"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />

    </LinearLayout>
</layout>

5.最后在activity中setAdapter即可

public class DataBindActivity extends Activity {

    private ActivityRecycleBinding activityRecycleBinding;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        activityRecycleBinding = DataBindingUtil.setContentView(this, R.layout.activity_recycle);

        ArrayList<DataBindModel> dataBindModels = new ArrayList<>();
        for (int i = 0;i<30;i++){
            DataBindModel dataBindModel = new DataBindModel();
            dataBindModel.setFirstName("这是第"+i+"个条目");
            dataBindModel.setLastName("这是第"+i+"个条目");
            dataBindModels.add(dataBindModel);
        }
        DataBindAdapter dataBindAdapter = new DataBindAdapter(dataBindModels,this);
        activityRecycleBinding.recylerView.setLayoutManager(new LinearLayoutManager(this));
        activityRecycleBinding.recylerView.setAdapter(dataBindAdapter);
    }
}

最终效果图如下:


image

还有更多用法请大家参考官方demo或者其他文章

相关文章

  • 最简单的安卓databinding接入教程

    1.model的buildgradle加 2.创建你所需要的model 3.布局文件中改为

  • 第二篇:安卓指纹接入

    1.IFAA安卓接入方案 安卓SDK有两种接入方式,Etas 生物认证服务 SDK以及原生SDK。其中,Et...

  • 安卓DataBinding学习

    DataBinding支持所有的android sdk,最低支持android2.1(API7)。使用DataBi...

  • Unity 接入安卓Sdk 菜鸟教程

    最近零零散散接入和几家sdk,有些没有unity的包,只能很痛苦的去接安卓,网上的各家帖子很多都互相复制粘贴而且还...

  • 安卓中使用MVP+DataBinding

    上回书说到 安卓中三种开发模式的简单介绍,这次我们来详细聊一聊MVP模式的用法,以及怎样配合DataBinding...

  • 安卓自定义View-画圆

    效果图 代码 安卓开发入门教程系列汇总 安卓发展历程及前景 安卓发展历程 安卓开发前景展望 初探安卓 安装开发工...

  • 安卓动画样例-圆环变多变少

    效果图 代码 安卓开发入门教程系列汇总 安卓发展历程及前景 安卓发展历程 安卓开发前景展望 初探安卓 安装开发工...

  • 安卓动画样例-放大缩小

    效果图 实现代码 安卓开发入门教程系列汇总 安卓发展历程及前景 安卓发展历程 安卓开发前景展望 初探安卓 安装开...

  • cordova+ionic制作安卓或者ios app

    前言如何搭建一个cordova+ionic环境来开发一个简单的安卓apk,这里我们只制作一个安卓app,看完教程后...

  • frida hook Toast

    牙叔教程 简单易懂 目标 hook安卓的Toast内容, 修改为牙叔教程 环境 雷电模拟器Android版本: 7...

网友评论

    本文标题:最简单的安卓databinding接入教程

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