liveData
为某个属性添加观察者,然后数据变化后通知观察者对UI更改;
例子
打分的demo,用最基本的语法方式实现,那么activity中会持有三个组件的引用和其对应的点击事件,在点击时候计数器增加并同时更新textview显示;
这里引用网络的longway老师的一张图,通过livedata将点击控件后做的两步操作分开;
1.livedata对数据添加观察者,只要数据变化就去更新textview;
2.点击事件只对分数进行更改
代码如下
/**
* 测试LiveData
*/
public class MainActivity2 extends AppCompatActivity {
private TextView textView;
private Button button1;
private Button button2;
private MainViewModel2 viewModel;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(null);
setContentView(R.layout.activity_main);
textView = findViewById(R.id.textView);
button1 = findViewById(R.id.button1);
button2 = findViewById(R.id.button2);
viewModel = ViewModelProviders.of(this).get(MainViewModel2.class);//新版这里写法不同
textView.setText(String.valueOf(viewModel.getScore()));
//对分数数据添加观察者,变动后自动更新UI
viewModel.getScore().observe(this, new Observer<Integer>() {
@Override
public void onChanged(Integer integer) {
textView.setText(String.valueOf(integer));
}
});
button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
viewModel.addScore(1);
}
});
button2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
viewModel.addScore(2);
}
});
}
}
Model类
/**
* 测试liveData对应的类
*/
public class MainViewModel2 extends ViewModel {
private MutableLiveData<Integer> score;
public MainViewModel2() {
score = new MutableLiveData<>();
score.setValue(0);
}
public void addScore(int n) {
score.setValue(new Integer(score.getValue() + n));
}
public MutableLiveData<Integer> getScore() {
return score;
}
}
仅此记录,如有问题,欢迎指出,谢谢
原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/6210.html