前景回顾
Android 安卓DataBinding(一)·基础
Android 安卓DataBinding(二)·入门
Android 安卓DataBinding(三)·单向绑定 BaseObservable
上一期讲到 BaseObservable 单向绑定,在中间又要写注解,又要加注解,然后还得用 notifyPropertyChanged(); 和 notifyChange(); 进行刷新。这样整体下来是比较麻烦的,所以,可以用ObservableField 进行单向绑定。
ObservableField 可以理解为是对 BaseObservable 的一层封装,省去了注解!与上文差别不大!
单向绑定
使用单向绑定刷新UI有三种
- 使用 BaseObservable
- 使用 ObservableField
- 使用 ObservableCollection
ObservableField
这次呢,在原 PeopleBean 上进行修改,布局文件不变,修改为如下,将变量使用 public final 进行修饰,重写get方法即可(final修饰后的变量你也没办法写set呀,气不气!),下方代码以 ObservableField<String> 和 ObservableField<Integer> 举例,你也可以用其他的,比如:
ObservableShort、ObservableBoolean、ObservableByte …等一系列!
package com.lkdot.data;
import android.databinding.BaseObservable;
import android.databinding.ObservableField;
public class PeopleBean extends BaseObservable {
public final ObservableField<String> name;
public final ObservableField<Integer> age;
public PeopleBean(ObservableField<String> name, ObservableField<Integer> age) {
this.name = name;
this.age = age;
}
public ObservableField<String> getName() {
return name;
}
public ObservableField<Integer> getAge() {
return age;
}
}
之后呢,在MainActivity中修改:
ObservableField提供了get、set方法,可以拿到值和更新值来达到更新UI效果(气不气!气不气,现在不用气了!)
package com.lkdot.data;
import android.annotation.SuppressLint;
import android.databinding.DataBindingUtil;
import android.databinding.ObservableField;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Toast;
import com.lkdot.data.databinding.ActivityMainBinding;
public class MainActivity extends AppCompatActivity {
private ActivityMainBinding activityMainBinding;
private PeopleBean peopleBean;
@SuppressLint("SetTextI18n")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//这句不用管,是关于安卓状态栏的
getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
activityMainBinding = DataBindingUtil.setContentView(this, R.layout.activity_main);
peopleBean = new PeopleBean(new ObservableField<String>("NorthernBrain"), new ObservableField<Integer>(25));
activityMainBinding.setPeoPleBean(peopleBean);
activityMainBinding.changeName.setText("改变Name");
activityMainBinding.changeAge.setText("增加Age");
activityMainBinding.setListener(new Listener());
}
public class Listener {
public void changeName() {
peopleBean.getName().set("改变的名字");
Toast.makeText(MainActivity.this, "改变Name", Toast.LENGTH_SHORT).show();
}
public void changeAge() {
peopleBean.getName().set("我要改变所有UI");
peopleBean.getAge().set(peopleBean.getAge().get()+1);
Toast.makeText(MainActivity.this, "改变所有UI", Toast.LENGTH_SHORT).show();
}
}
}
运行效果
下一篇文章 Android 安卓DataBinding(五)·单向绑定 ObservableCollection(集合使用)