Android >> 14. LiveData
通过上一节:Android >> 12. ViewModel 状态保存,我们知道一个activity的数据可以被ViewModel 单独管理,但是数据对UI 界面的驱动还是由Controler 进行控制,所以我们需要在ViewModel 中增加一个LiveData 用来实现数据对UI 界面的直接驱动,从而减少Controler 的工作。
对新建ViewModel 类的操作
-
首先在java 文件同级目录中新建一个类并继承自ViewModel,例如ViewModelWithLiveData,其负责存储和管理LiveData
-
然后在ViewModelWithLiveData 类中创建需要管理的LiveData:
我在此创建了两个MutableLiveData<String>
变量
private MutableLiveData<String> LikedNumber_ip;
private MutableLiveData<String> LikedNumber_port;
- 创建对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 文件程序的操作
- 定义了一个类,当然就要对其进行实例化
首先在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 就布置好了。
最后再回顾一下整体的思路:
上一篇: mysql数据有关问题 grounp by 行不行
下一篇: Joomla开启SEF的方法