Android Studio 之 ViewModel (转)

时间:2023-01-29 18:03:15

ViewModel 是 JetPack 类库中的一个功能,可以保存控件的状态 ,在整个Activity 生命周期中,状态不会失效

如屏幕翻转时,状态可保留,不会失效!

与 LiveData 配合使用!

配合 Room 进行 Sqlite 操作数据库

 

Android Studio 之 ViewModel (转)

 

 

新建 ViewModel 类,在MainActivity类的父结点上右击,点创建java类

注意:Superclass 中要选 ViewModel

Android Studio 之 ViewModel (转)

 

 

1. ViewModel 类中放一个public 的整数变量

Android Studio 之 ViewModel (转)

 

 


2. 在MainActivity类中创建一个 MyViewModel 实例,

注意:ViewModelProviders 这个对象,需要在 build.gradle中的 dependencies 结点中, 添加引用  implementation ‘androidx.lifecycle:lifecycle-extensions:2.1.0‘

 

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 package  com.example.viewmodel1;   import  android.os.Bundle; import  android.view.View; import  android.widget.Button; import  android.widget.TextView;   import  androidx.appcompat.app.AppCompatActivity; import  androidx.lifecycle.ViewModelProviders;   public  class  MainActivity  extends  AppCompatActivity {        MyViewModole myViewModole;      TextView textView;      Button button1;      Button button2;        String TAG =  "myTag" ;        @Override      protected  void  onCreate(Bundle savedInstanceState) {          super .onCreate(savedInstanceState);          setContentView(R.layout.activity_main);            button1 = findViewById(R.id.button);          button2 = findViewById(R.id.button2);          textView = findViewById(R.id.textView);              myViewModole = ViewModelProviders.of( this ).get(MyViewModole. class );   //实例化               textView.setText(String.valueOf(myViewModole.numberAnInt)); //初始时,给它赋值            button1.setOnClickListener( new  View.OnClickListener() {              @Override              public  void  onClick(View view) {                  myViewModole.numberAnInt ;                  textView.setText(String.valueOf(myViewModole.numberAnInt));              }          });          button2.setOnClickListener( new  View.OnClickListener() {              @Override              public  void  onClick(View view) {                  myViewModole.numberAnInt =  2 ;                  textView.setText(String.valueOf(myViewModole.numberAnInt));              }          });      } }