Android Jetpack ViewModel管理数据
16lz
2021-01-23
用Jetpack中的ViewModel管理数据
ViewModel是属于Android的Jetpack库里的一个类
创建项目时要先勾选 use androidx.* artifacts (现在已经必选)
实现效果:
1.创建ViewModel类
在MainActivity.java相同路径下新建java class
Superclass(继承于):androidx.lifecycle.ViewModel
(1)用ViewModel管理数据
(2)在MainActivity.java中关联控件和ViewModel类
- 通过ViewModelProviders.of(this).get(MyViewModel.class)创建一个ViewModel对象
ViewModelProviders导入:ViewModelProviders方法已弃用,先输入ViewModelProviders,依靠红色提示依次添加依赖,导入类
- 初始化界面
textView.setText(String.valueOf(myViewModel.number));
- 关联其余控件,设定点击事件等
button1.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { myViewModel.number++; // 点击让数据+1 myViewModel.number int类型 textView.setText(String.valueOf(myViewModel.number)); // 再刷新界面 } });
完整代码:
package com.example.viewmodeltest;import androidx.appcompat.app.AppCompatActivity;import androidx.lifecycle.ViewModelProviders;import android.os.Bundle;import android.view.View;import android.widget.Button;import android.widget.TextView;public class MainActivity extends AppCompatActivity { MyViewModel myViewModel;//声明ViewModel变量 TextView textView; Button button1,button2; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 关联 myViewModel=ViewModelProviders.of(this).get(MyViewModel.class); //创建一个ViewModel对象 textView=findViewById(R.id.textView); textView.setText(String.valueOf(myViewModel.number)); button1=findViewById(R.id.button); button2=findViewById(R.id.button2); button1.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { myViewModel.number++; // 点击让数据+1 myViewModel.number int类型 textView.setText(String.valueOf(myViewModel.number)); // 再刷新界面 } }); button2.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { myViewModel.number+=2; textView.setText(String.valueOf(myViewModel.number)); } }); }}
通过让ViewModel管理数据,更加模块化,同时在不设置SaveIntanceState的情况下切换系统语言、翻转屏幕、home键暂停应用时,数据不丢失。
更多相关文章
- Android中的数据结构解析(四)SparseArray和ArrayMap
- Android 之 ContentProvider 共享数据库-通讯录
- 如何POST一个JSON格式的数据给Restful服务
- android EditText控件如何禁止输入内容
- Android多种数据库存储方式对比
- 基于TCP/IP协议的Java服务端与Android客户端的Socket通信及数据
- Android通过selector改变界面状态
- [Android1.6]继承BaseAdapter为GridView设置数据时设置setLayout
- Android控件开发之一----TextView