LiveData简单使用详解手机开发

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

(0)
上一篇 2021年7月17日
下一篇 2021年7月17日

相关推荐

发表回复

登录后才能评论