欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Android >> 14. LiveData

程序员文章站 2022-06-08 16:04:06
...

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

Android >> 14. LiveData

对新建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 就布置好了。
最后再回顾一下整体的思路:
Android >> 14. LiveData

相关标签: Android LiveData