博主前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住也分享一下给大家,
点击跳转到网站
前言: 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的简单使用,有不当之处,可以指出~