我是靠谱客的博主 笑点低小天鹅,这篇文章主要介绍ViewModel的简单使用,现在分享给大家,希望可以做个参考。

一.首先添加ViewModel需要的依赖

复制代码
1
2
3
4
5
6
dependencies { ... //添加lifecycle框架的依赖 implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0-rc02' }

二.创建一个类继承ViewModel
MyViewModel.java

复制代码
1
2
3
4
public class MyViewModel extends ViewModel { public int num = 0; }

三.在mainActivity中通过new ViewModelProvider(this).get(MyViewModel.class);得到myviewmodel这个实例对象。
MainActivity.java

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
package com.mrlove.viewmodel; import androidx.appcompat.app.AppCompatActivity; import androidx.lifecycle.ViewModelProvider; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.TextView; public class MainActivity extends AppCompatActivity { MyViewModel myViewModel; TextView textView; Button button1; Button button2; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); button1 = findViewById(R.id.button1); button2 = findViewById(R.id.button2); textView = findViewById(R.id.textView2); //官方已经弃用 // myViewModel = ViewModelProviders.of(this).get(MyViewModel.class); //获取实例对象 myViewModel = new ViewModelProvider(this).get(MyViewModel.class); textView.setText(String.valueOf(myViewModel.num)); button1.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { myViewModel.num++; textView.setText(String.valueOf(myViewModel.num)); } }); button2.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { myViewModel.num += 2; textView.setText(String.valueOf(myViewModel.num)); } }); } }

布局文件
activity_main.xml

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
<?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout 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=".MainActivity"> <TextView android:id="@+id/textView2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="24sp" app:layout_constraintBottom_toTopOf="@+id/guideline2" app:layout_constraintEnd_toStartOf="@+id/guideline4" app:layout_constraintStart_toStartOf="@+id/guideline4" app:layout_constraintTop_toTopOf="@+id/guideline8" tools:text="100" /> <androidx.constraintlayout.widget.Guideline android:id="@+id/guideline" android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="horizontal" app:layout_constraintGuide_percent="0.12" /> <androidx.constraintlayout.widget.Guideline android:id="@+id/guideline2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="horizontal" app:layout_constraintGuide_percent="0.62" /> <androidx.constraintlayout.widget.Guideline android:id="@+id/guideline3" android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="vertical" app:layout_constraintGuide_percent="0.67" /> <Button android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/button1" app:layout_constraintBottom_toTopOf="@+id/guideline2" app:layout_constraintEnd_toStartOf="@+id/guideline3" app:layout_constraintStart_toStartOf="@+id/guideline3" app:layout_constraintTop_toTopOf="@+id/guideline2" /> <androidx.constraintlayout.widget.Barrier android:id="@+id/barrier" android:layout_width="wrap_content" android:layout_height="wrap_content" app:barrierDirection="top" /> <androidx.constraintlayout.widget.Guideline android:id="@+id/guideline8" android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="horizontal" app:layout_constraintGuide_percent="0.33" /> <Button android:id="@+id/button2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/button2" app:layout_constraintBottom_toTopOf="@+id/guideline8" app:layout_constraintEnd_toStartOf="@+id/guideline3" app:layout_constraintStart_toStartOf="@+id/guideline3" app:layout_constraintTop_toTopOf="@+id/guideline8" /> <androidx.constraintlayout.widget.Guideline android:id="@+id/guideline4" android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="vertical" app:layout_constraintGuide_begin="173dp" /> </androidx.constraintlayout.widget.ConstraintLayout>

通过使用ViewModel来存储数据,防止数据因为布局的重载而丢失,也不必再使用onSaveInstanceState来零时保存数据。

复制代码
1
2
3
4
5
6
@Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); outState.putString("textView",textView.getText().toString()); }

ViewModel官方介绍:https://developer.android.google.cn/topic/libraries/architecture/viewmodel.html#java
github参考代码:
https://github.com/Mrlove133481/ViewModel

最后

以上就是笑点低小天鹅最近收集整理的关于ViewModel的简单使用的全部内容,更多相关ViewModel内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(68)

评论列表共有 0 条评论

立即
投稿
返回
顶部