今天在学习的过程中,我学了一下Android的架构组件之ViewModel的学习操作。ViewModel也是属于我们的Android Jetpack的一部风。
Android 开发者文档中是这么说的:
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 比较的重要,我们后面会经常用到。这样我们的ViewModel就OK了。
这个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进行了赋值的操作。
如果重新创建了改Activity,那么他接受的MyViewModel实例和第一个Activity创建的实例相同,当Activity完成时,矿建会调用ViewModel的onCleared()方法,来清理资源。