前言: ViewModel的简单介绍
介绍:ViewModel 类旨在以注重生命周期的方式存储和管理界面相关的数据。ViewModel 类让数据可在发生屏幕旋转,更换系统语言等配置更改后继续留存。
接下来我们通过一个简单的例子,来了解和使用ViewModel
一、首先引入ViewModel的相关依赖
implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0'
二、布局文件activity_view_model.xml
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".ViewModelActivity"> <TextView android:id="@+id/tv_figure" android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center" android:text="0" android:textSize="20sp" /> <Button android:id="@+id/btn_add1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:layout_marginTop="40dp" android:text="+1" /> <Button android:id="@+id/btn_add2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:layout_marginTop="100dp" android:text="+2" /> </RelativeLayout>
三、创建MyViewModel类继承于ViewModel
public class MyViewModel extends ViewModel { public int number=0; }
四、在ViewModelActivity进行相应的功能编写
public class ViewModelActivity extends AppCompatActivity { private TextView tv_figure; private Button btn_add1, btn_add2; private MyViewModel myViewModel; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_view_model); tv_figure = findViewById(R.id.tv_figure); btn_add1 = findViewById(R.id.btn_add1); btn_add2 = findViewById(R.id.btn_add2); //这个获取MyViewModel对象的方法已经被废弃了 // myViewModel = ViewModelProviders.of(this).get(MyViewModel.class); //创建MyViewModel对象 myViewModel = new ViewModelProvider(this).get(MyViewModel.class); tv_figure.setText(String.valueOf(myViewModel.number)); btn_add1.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { myViewModel.number++; tv_figure.setText(String.valueOf(myViewModel.number)); } }); btn_add2.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { myViewModel.number += 2; tv_figure.setText(String.valueOf(myViewModel.number)); } }); } }
效果演示:
可以看到屏幕进行旋转后,数据依然在,这就是ViewModel的简单使用,有不当之处,可以指出~