Android >> 14. LiveData

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

Android >> 14. LiveData_第1张图片

对新建ViewModel 类的操作

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

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

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_第2张图片

你可能感兴趣的:(Android,安卓开发)