Jetpack ——LiveData初识到源码解析(一)

上篇博客分享了下Lifecycle,使用的技术也就是:观察者模式+注解+反射。本篇博客继续学习Jetpack的LiveData,其实这个东西是一种可观察的数据存储类。LiveData自己可以作为观察者,观察到数据变化,并回调给开发者。 它是可以监听到Activity(Fragment)生命周期的变化,并且在Activity处于活跃状态下,才发送时间通知开发者处理业务逻辑。LiveData官网这个LiveData不是数据,是数据存储类。LiveData的使用示例:一个按钮,一个TextView
摘要由CSDN通过智能技术生成

上篇博客分享了下Lifecycle,使用的技术也就是:观察者模式+注解+反射。本篇博客继续学习Jetpack的LiveData,其实这个东西是一种可观察的数据存储类。

LiveData自己可以作为观察者,观察到数据变化,并回调给开发者。 它是可以监听到Activity(Fragment)生命周期的变化,并且在Activity处于活跃状态下,才发送时间通知开发者处理业务逻辑。

LiveData官网

这个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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值