从来好事天生俭,自古瓜儿苦后甜。这篇文章主要讲述Android 架构组件 之 ViewModel 学习相关的知识,希望能为你提供帮助。
Overview今天在学习的过程中,我学了一下android的架构组件之ViewModel的学习操作。ViewModel也是属于我们的Android Jetpack的一部风。
Android 开发者文档中是这么说的:
ViewModel 类旨在以注重生命周期的方式存储和管理界面相关的数据。ViewModel 类让数据可以在发生旋转等配置更改后继续存在的。看一看我们是如何使用ViewModel的
架构组件为界面控制器提供了ViewModel接着我们按照我们国际惯例,来看一下实现代码:
辅助程序类,该类负责为界面准备数据,在配置更改期间会自动保留ViewModel对象,以便他们存储的数据立即提供给下一个Activity或者是Fragment实例使用。如果需要在应用中显示用户列表,请确保获取和保留该用户列表的责任分配给ViewModel,而不是Activity或是Fragment。
package com.example.viewmodellearn;
import androidx.lifecycle.LiveData;
import androidx.lifecycle.MutableLiveData;
import androidx.lifecycle.ViewModel;
import java.util.ArrayList;
import java.util.List;
public class MyViewModel extends ViewModel {
private MutableLiveData<
List<
User>
>
users;
public LiveData<
List<
User>
>
getUsers() {
if (users == null) {
users = new MutableLiveData<
List<
User>
>
();
loadUsers();
}return users;
}private void loadUsers() {
List<
User>
usersList=new ArrayList<
>
();
usersList.add(new User("
Jia Hao"
,"
Male"
,"
18"
,"
China JiangSu"
));
users.setValue(usersList);
}
}
首先我们需要创建一个class 命名为
MyViewModel
然后该类需要继承于我们的ViewModel
这样我们就创建完成了。在这里我希望
ViewModel
来帮助我处理User的信息,因为作为一个软件来说User的信息还是比较重要的。但是在这之前我们需要创建一个User的实体类。这个随便就不放代码了。
完成这些之后我们就开始搭建我们的ViewModel了。
- 创建一个
MutableLiveData< List< User> >
的对象为users,这个users 比较的重要,我们后面会经常用到。 - 然后我们需要一个getUsers的方法,这个方法可以帮助完成获取Users的操作。这几个方法的返回值为User
- 但是我们在获取的时候需要注意一个点,就是如果没有存入用户数据我们直接获取那么就会出现空指针错误,这个问题还是非常恶心的。所以!需要在获取前进行判断我们的users是否为空,如果如果为空我们需要去初始化我们的User数据,就是我们的loadUsers方法。
这个ViewModel完成之后我们看一下如何对我们的Activity或者是Fragment来操作了。
老规矩先看一下我们的代码:
package com.example.viewmodellearn;
import androidx.appcompat.app.AppCompatActivity;
import androidx.lifecycle.Observer;
import androidx.lifecycle.ViewModelProviders;
import android.os.Bundle;
import android.widget.TextView;
import java.util.List;
public class MainActivity extends AppCompatActivity {@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
MyViewModel model= ViewModelProviders.of(this).get(MyViewModel.class);
model.getUsers().observe(this, new Observer<
List<
User>
>
() {
@Override
public void onChanged(List<
User>
users) {
((TextView)findViewById(R.id.main_Txt_UserName)).setText(users.get(0).getName());
}
});
}
}
这里的操作是我对界面中的一个TextView进行了赋值的操作。
- 将我们刚才完成的ViewModel实例化一下,然后我们通过我们的getUsers方法来完成我们更新UI的操作。
推荐阅读
- application.properties中的list配置
- Android android problem
- Reface.AppStarter 框架初探
- Android应用加固的简单实现方案
- wake up on lan 安卓手机控制局域网唤醒开机+远程关机
- flask 源码专题(app.run()的背后)
- 安卓计步器的简单实现
- Android_校易app开发日志_第三天
- R switch语句示例图解