DataBinding动态改变数据

DataBinding动态改变数据

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

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

一、具体实现:

1、xml布局:



    
        
        
        
        
    
    
    
        

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("改变后的文本");
    }
}



你可能感兴趣的:(Android)