DataBinding动态改变数据

DataBinding动态改变数据

DataBinding减少了java逻辑代码与xml布局的交互,不仅体现在省去了findViewById(),还体现在动态的数据改变。例如:我们不使用框架要去改变一个TextView的文本信息,则需要用TextView的对象去调用setText( )方法。使用DataBinding则不需要如此。

DataBinding提供了动态改变数据的方式。

一、具体实现:

1、xml布局:

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    tools:context="com.xhx.databinding.databindingtest.MainActivity">
    <data>
        <import type="com.xhx.databinding.databindingtest.Main2Activity"/>
        <import type="com.xhx.databinding.databindingtest.DataBean"/>
        <variable
            name="main2"
            type="Main2Activity"/>
        <variable
            name="data"
            type="DataBean"/>
    </data>
    <!--android studio 2.3自动生成的容器组件-->
    <android.support.constraint.ConstraintLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:layout_editor_absoluteY="0dp"
        tools:layout_editor_absoluteX="0dp">
        <Button
	<!--监听的实现如果看不懂请看上一篇中的事件绑定部分-->
            android:onClick="@{main2.clickListner}"
            android:id="@+id/btn_1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="点击改变TextView文字类容"
            android:layout_marginLeft="8dp"
            app:layout_constraintLeft_toLeftOf="parent"
            android:layout_marginTop="16dp"
            app:layout_constraintTop_toBottomOf="@+id/tv_long" />
        <TextView
            android:id="@+id/tv_long"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@{data.str_text}"
            app:layout_constraintTop_toTopOf="parent"
            android:layout_marginTop="16dp"
            android:layout_marginLeft="8dp"
            app:layout_constraintLeft_toLeftOf="parent" />
    </android.support.constraint.ConstraintLayout>
</layout>

2、DataBean实现类:

第一步:继承BaseObservable观察者

第二步:在需要改变的变量对应的get方法上添加注解:@Bindable

第三步:在对应的set方法中调用notifyPropertyChanged()并传入(BR.变量名)

import android.databinding.BaseObservable;
import android.databinding.Bindable;
//继承BaseObservable观察者
public class DataBean extends BaseObservable{
    String str_text;

    public DataBean(String str_text) {
        this.str_text = str_text;
    }
    //添加@Bindable
    @Bindable
    public String getStr_text() {
        return str_text;
    }
    //在此调用
    public void setStr_text(String str_text) {
        this.str_text = str_text;
        //此处可能报红,因为还未进行编译,BR文件中还未生成str_text
        notifyPropertyChanged(BR.str_text);
    }
}

3、Activity代码:

public class Main2Activity extends AppCompatActivity {
    DataBean dataBean;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
//        setContentView(R.layout.activity_test);
        ViewDataBinding binding = DataBindingUtil.setContentView(this, R.layout.include_layout);
        dataBean=new DataBean("改变前的文本");
        //此处可能报红,因为还未进行编译,main2、data在BR文件中还未生成
        binding.setVariable(BR.main2,this);
        binding.setVariable(BR.data,dataBean);
    }
    public void clickListner(View view){
        dataBean.setStr_text("改变后的文本");
    }
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值