jetpack—–ViewModel(从mvc到mvvm)

  在传统开发模式下,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

以上是jetpack—–ViewModel(从mvc到mvvm)的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>