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;
    }
}

仅此记录,如有问题,欢迎指出,谢谢

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值