在传统开发模式下,activity的任务太重了,既要负责逻辑处理还要负责UI展示,甚至还得处理网格回调。在小项目里这么写没啥问题,但在大项目中写就会非常臃肿难以维护。。。
viewModel的一个重要作用就是可以帮助Activity分担一部分工作,它是专门用于存放与界面相关的数据的。也就是说,只要界面上能够看得到的数据,它的相关变量都应存放在ViewModel中,而不是activity中。
ViewModel还有一个非常重要的特性,当手机横竖屏切换时,activity会被重新创建,同时存放在activity中的数据也会丢失。而ViewModel的生命周期则不同,只有当activity退出的时候才会跟着activity一起销毁。
build.gradle导包
dependencies {
implementation ‘android.arch.lifecycle:extensions:1.1.1‘
}
设计界面 一个textview 两个button
一个button是增加 一个button是减少 点击这俩按钮,对应的数会在textview展现
MyViewModel
package com.example.localization; import androidx.lifecycle.ViewModel; public class MyViewModel extends ViewModel { public int number = 0; }
Main
package com.example.localization; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.TextView; import androidx.appcompat.app.AppCompatActivity; import androidx.lifecycle.ViewModelProvider; import androidx.lifecycle.ViewModelProviders; public class MainActivity extends AppCompatActivity { MyViewModel myViewModel; Button button; Button button2; TextView textView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); button = findViewById(R.id.button); button2 = findViewById(R.id.button2); textView = findViewById(R.id.textView2); //通过ViewModelProvider去获取ViewModel对象 //之所以这么写是因为ViewModelProvider有独立的生命周期而且生命周期长于activity myViewModel = new ViewModelProvider(this,new ViewModelProvider.NewInstanceFactory()).get(MyViewModel.class); //每次屏幕翻转虽然数据没丢,但是文本框的字依旧会变成welcome 这样解决 textView.setText(String.valueOf(myViewModel.number)); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { myViewModel.number++; textView.setText(String.valueOf(myViewModel.number)); //不类型转换就报错 } }); button2.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { myViewModel.number--; textView.setText(String.valueOf(myViewModel.number)); } }); } }
jetpack-----ViewModel(从mvc到mvvm)
原文:https://www.cnblogs.com/tuyaojiao/p/15342563.html