首页 > Web开发 > 详细

jetpack-----ViewModel(从mvc到mvvm)

时间:2022-05-27 22:40:37      阅读:5      评论:0      收藏:0      [点我收藏+]

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

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!