Android >> 14. LiveData

通过上一节:Android >> 12. ViewModel 状态保存,我们知道一个activity的数据可以被ViewModel 单独管理,但是数据对UI 界面的驱动还是由Controler 进行控制,所以我们需要在ViewModel 中增加一个LiveData 用来实现数据对UI 界面的直接驱动,从而减少Controler 的工作。

在这里插入图片描述

对新建ViewModel 类的操作

  1. 首先在java 文件同级目录中新建一个类并继承自ViewModel,例如ViewModelWithLiveData,其负责存储和管理LiveData

  2. 然后在ViewModelWithLiveData 类中创建需要管理的LiveData:
    我在此创建了两个MutableLiveData<String> 变量

private MutableLiveData<String> LikedNumber_ip;
private MutableLiveData<String> LikedNumber_port;
  1. 创建对LiveData 进行操作的方法:
public MutableLiveData<String> getLikedNumber_ip() {
	if (LikedNumber_ip == null) {
		LikedNumber_ip = new MutableLiveData<>();
		LikedNumber_ip.setValue("");
	}
		return LikedNumber_ip;
}

public MutableLiveData<String> getLikedNumber_port() {
	if (LikedNumber_port == null){
		LikedNumber_port = new MutableLiveData<>();
		LikedNumber_port.setValue("");
	}
	return LikedNumber_port;
}

public void setEditText_ip(String string){
	LikedNumber_ip.setValue(string);
}

public void setEditText_port(String string){
	LikedNumber_port.setValue(string);
}

这时,ViewModelWithLiveData类就写好了。

对程序java 文件程序的操作

  1. 定义了一个类,当然就要对其进行实例化
    首先在MainAcitvity类中先声明对象
ViewModelWithLiveData viewModelWithLiveData;

然后在onCreate() 方法中对该对象进行实例化并设置观察者

注意:对于ViewModel 的实例化并不是使用new 而是使用ViewModelProviders 进行映射

viewModelWithLiveData = ViewModelProviders.of(this).get(ViewModelWithLiveData.class);
/* 设置LikedNumber_ip 的观察者 */
viewModelWithLiveData.getLikedNumber_ip().observe(this, new Observer<String>() {
    @Override
    public void onChanged(String s) {
        medittext_ip.setText(String.valueOf(s));
    }
});
/* 设置LikedNumber_port 的观察者 */
viewModelWithLiveData.getLikedNumber_port().observe(this, new Observer<String>() {
    @Override
    public void onChanged(String s) {
        medittext_port.setText(String.valueOf(s));
    }
});

这两个观察者的作用就是,在getLikedNumber_ip() 和getLikedNumber_port() 方法的返回值发生改变时,将两个EditText 进行文本设置。

好,那这两个返回值如何改变呢,此时就要在触发事件中对这两个值进行赋值了

/* 改变viewModelWithLiveData 中的MutableLiveData,然后就会触发观察者 */
viewModelWithLiveData.setEditText_ip("xx.xx.xx.xx");
viewModelWithLiveData.setEditText_port("xx");

这两行是写在你需要其触发的地方,例如什么按键的onClick() 方法中



至此,这个LiveData 就布置好了。
最后再回顾一下整体的思路:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

诺亚方包

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值