上篇博客分享了下Lifecycle,使用的技术也就是:观察者模式+注解+反射。本篇博客继续学习Jetpack的LiveData,其实这个东西是一种可观察的数据存储类。
LiveData自己可以作为观察者,观察到数据变化,并回调给开发者。 它是可以监听到Activity(Fragment)生命周期的变化,并且在Activity处于活跃状态下,才发送时间通知开发者处理业务逻辑。
这个LiveData不是数据,是数据存储类。
LiveData的使用
示例:一个按钮,一个TextView , 点击一个按钮,TextView的值+1。
LiveData一般是结合ViewModel使用的,关于ViewModel,之后的博客再分享。 先创建一个类继承自ViewModel:
/**
* author: liumengqiang
* Date : 2020/5/14
* Description :
*/
public class NameViewModel extends ViewModel {
//MutableLiveData继承自LiveData
private MutableLiveData<String> name;
//暴露获取方法
public MutableLiveData<String> getName() {
if(name == null) {
name = new MutableLiveData<>();
}
return name;
}
}
使用的话就很简单了, 在Activity的onCreate方法中:
private int index = 0;
private TextView nameTextView;
private Button btn;
private NameViewModel nameViewModel;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_live_data);
//获取或者创建ViewModel
nameViewModel =
new ViewModelProvider(this,
new ViewModelProvider.AndroidViewModelFactory(getApplication())).get(NameViewModel.class);
//绑定LiveData到一个观察者上
nameViewModel.getName().observe(this, new Observer<String>() {
@Override
public void onChanged(String s) {
nameTextView.setText(s);
}
});
nameTextView = findViewById(R.id.live_data_text);
btn = findViewById(R.id.live_data_btn);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//数据源改变
String name = "hello world " + (index ++);
nameViewModel.getName().setValue(name);
}
});
}
这个代码就很简单了,结果如下图:
这个例子是很简单的,LiveDa