Android JetPack组件之ViewModel的使用详解

Android ViewModel详解 视图与数据模型之间的桥梁ViewModel ViewModel的生命周期会比创建它的Activity、Fragment的生命周期都要长。即ViewModel中的数据会一直存活在Activity/Fragment中。众所周知,由于Android平台的特殊性,若应用程序发送屏幕旋转的时候会经历Activity的销毁与重建,这里就涉及到数据保存的问题。虽然Activity可以通过onSaveInstanceState()机制保存与恢复数据,但是onSaveInstanceState()方法只能存储少量的数据进行恢 阅读详情

博主前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住也分享一下给大家,
👉点击跳转到网站

前言: ViewModel的简单介绍

介绍:ViewModel 类旨在以注重生命周期的方式存储和管理界面相关的数据。ViewModel 类让数据可在发生屏幕旋转,更换系统语言等配置更改后继续留存。
接下来我们通过一个简单的例子,来了解和使用ViewModel
一、首先引入ViewModel的相关依赖

implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0'

二、布局文件activity_view_model.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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=".ViewModelActivity">

    <TextView
        android:id="@+id/tv_figure"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:text="0"
        android:textSize="20sp" />

    <Button
        android:id="@+id/btn_add1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="40dp"
        android:text="+1" />

    <Button
        android:id="@+id/btn_add2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="100dp"
        android:text="+2" />
</RelativeLayout>

三、创建MyViewModel类继承于ViewModel

public class MyViewModel extends ViewModel {
    public int number=0;
}

四、在ViewModelActivity进行相应的功能编写

public class ViewModelActivity extends AppCompatActivity {
    private TextView tv_figure;
    private Button btn_add1, btn_add2;
    private MyViewModel myViewModel;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_view_model);
        tv_figure = findViewById(R.id.tv_figure);
        btn_add1 = findViewById(R.id.btn_add1);
        btn_add2 = findViewById(R.id.btn_add2);
        //这个获取MyViewModel对象的方法已经被废弃了
//        myViewModel = ViewModelProviders.of(this).get(MyViewModel.class);
        //创建MyViewModel对象
        myViewModel = new ViewModelProvider(this).get(MyViewModel.class);
        tv_figure.setText(String.valueOf(myViewModel.number));
        btn_add1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                myViewModel.number++;
                tv_figure.setText(String.valueOf(myViewModel.number));
            }
        });
        btn_add2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                myViewModel.number += 2;
                tv_figure.setText(String.valueOf(myViewModel.number));
            }
        });
    }
}

效果演示:
在这里插入图片描述
可以看到屏幕进行旋转后,数据依然在,这就是ViewModel的简单使用,有不当之处,可以指出~

Android ViewModel深入解析 ViewModel 类是一种业务逻辑或屏幕级状态容器。它用于将状态公开给界面,以及封装相关的业务逻辑。它的主要优点是,它可以缓存状态,并可在配置更改后持久保留相应状态。这意味着在 activity 之间导航时或进行配置更改后(例如旋转屏幕时),界面将无需重新提取数据。注意:AndroidX以后才能使用ViewModel。 阅读详情

相关推荐

Android Jetpack架构组件之 ViewModel (源码篇)

1、前言 最近简单看了下google推出的框架Jetpack,感觉此框架的内容可以对平时的开发有很大的帮助,也可以解决很多开发中的问题,对代码的逻辑和UI界面实现深层解耦,打造数据驱动型UI界面。 Android Architecture组件是Android Jetpack的一部分,它们是一组库,旨在帮助开发者设计健壮、可测试和可维护的应用程序,包含一下组件: 带你领略Android Jet...

浅谈Android 7282

彻底掌握Android中的ViewModel

ViewModel 属于`Android Jetpack`库的一部分,是一种业务逻辑或屏幕状态容器。它提供了在配置更改(如屏幕旋转)后依旧保留相应状态的特性,帮助开发者以更加清晰和可维护的方式处理UI相关的数据,从而避免了在 Activity 或 Fragment 中直接处理数据持久化的问题。

白泽的博客 8478

Android Jetpack组件ViewModel基本使用和原理分析

本文整体流程:首先要知道什么是 ViewModel,然后演示一个例子,来看看 ViewModel 是怎么使用的,接着提出问题为什么是这样的,最后读源码来解释原因! 1.什么是ViewModel 1.1.定义 ViewModel 类旨在以注重生命周期的方式存储和管理界面相关的数据。ViewModel 类让数据可在发生屏幕旋转等配置更改后继续留存。在对应的作用域内,保正只生产出对应的唯一实例,保证UI组件间的通信。 ViewModel 一般要配合 LiveData、DataBinding一起使用 1.2.特点

AboBack 827

【Android】Jetpack 中的 ViewModel - 使用篇

ViewModel 是 Jetpack 中的一个组件,它旨在存储和管理与 UI 相关的数据。ViewModel 的设计思想是将 UI 层与业务逻辑分离,使得数据在配置更改(例如屏幕旋转)时仍然保持可用。ViewModel 独立于 UI 层的生命周期,并在配置更改时保留其状态,因此可以轻松地处理生命周期感知的数据。ViewModel 通常与 LiveData 结合使用,后者是一个可观察的数据容器。

yihanss的博客 1706

Android Jetpack组件:Lifecycle与ViewModel

本文详细介绍了Android Jetpack组件中的Lifecycle与ViewModel,阐述了它们的作用、优势以及在实际开发中的应用。通过使用Lifecycle与ViewModel,开发者可以更好地管理应用的生命周期和数据,提高代码的可维护性,降低内存泄漏的风险。在未来的开发中,我们应该充分运用这些组件,提高应用的质量和稳定性。在实践过程中,我们还需要不断学习和探索,以充分发挥Jetpack组件的优势。同时,我们也期待Google在未来推出更多优秀的Jetpack组件,助力Android应用开发。

2501_92487717的博客 891

Android Jetpack组件:Room与ViewModel

Room是一个SQLite对象映射库,它提供了简洁的API来操作数据库,使得开发者能够以更少的代码实现数据持久化。Room将SQLite数据库的操作抽象化,使得开发者可以专注于业务逻辑,而不是数据库操作细节。ViewModel是Jetpack组件之一,用于存储和管理与UI相关的数据。ViewModel的设计目的是让UI控制器(如Activity或Fragment)能够保持一个干净的界面状态,同时确保数据的持久性和一致性。本文详细阐述了Android Jetpack组件中的Room与ViewModel。

2501_92487266的博客 1053

Android Jetpack组件(三)ViewModel

对于支持横竖屏切换的应用程序,我们切换横竖屏时,Activity会被重新创建,我们需要考虑数据的存储和恢复。Jetpack为我们提供了ViewModel组件帮我们解决这个问题,ViewModel以注重生命周期的方式存储和管理界面相关的数据。ViewModel独立于配置变化,就算Activity重建,也不会影响ViewModel的生命周期。

八归少年 2085

Android架构组件JetPack之ViewModel(二),android面试题2024基础

找工作是个很辛苦的事情,而且一般周期都比较长,有时候既看个人技术,也看运气。第一次找工作,最后的结果虽然不尽如人意,不过收获远比offer大。接下来就是针对自己的不足,好好努力了。最后为了节约大家的时间,我把我学习所用的资料和面试遇到的问题和答案都整理成了PDF文档,都可以分享给有需要的朋友,如有需要私信我【资料】或者**【点这里】免费领取**《Android面试复习资料汇总》自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

2401_83621136的博客 1147

Android Jetpack组件之ViewModel使用

2、VIewModel简介 Android框架管理UI控制器的生命周期,例如Activity和Fragment。框架可以决定销毁或重新创建UI控制器以响应完全不受控制的某些用户动作或设备事件,那设想一种情况当用户在界面操作录入了一些信息后,因为某种原因导致Activity重新创建,那此时用户写好的信息呢?如果要重头再来可能有的用户就会不耐烦了,进而减少了使用,可能有人说,可以使用onSaveInstanceState()方法并从包中恢复其数据 onCreate(),但此方法仅适用于可以序列化然后反序列化的

Jason_Lee155的博客 704

Android Jetpack架构组件(六)一文带你了解ViewModel的使用和原理

本文首发于微信公众号「后厂技术官」 前言 在本系列的第4和第5篇文章中,介绍了LiveData的使用和原理,LiveData和ViewModel是一对好搭档,这篇文章我们一起来学习什么是ViewModel、ViewModel基本使用、ViewModel的原理。 1.什么是ViewModel 在说ViewModel前,我们需要解一下MVVM和DataBinding,在Android进阶三部曲第...

Android进阶三部曲 - 刘望舒 2955

android ViewModel 基础第一集

前言: 各位同学大家好,五一大家都放假了吧。大家记得吃好玩好啊 哈哈哈 。 今天要讲的我viewmodel的系列教程的第一集也是我在五一劳动节假期 写出来的 希望能帮助到各位。 那么废话不多是我们正式开始。 效果图: 使用了viewmodel 未使用viewmodel 理论知识结构图 看到到上面的效果入 我们今天就用一个实际场景案例 用在点击屏幕中的加号button 上面文本一直累加 然后我们在旋转屏幕的时候 看一下数据会不会丢失。 具体效果实现 使用了viewmodel

xq610928的博客 622

Android Jetpack组件之ViewModel篇

PS:原文首发于微信公众号:躬行之(jzman-blog) 前面学习了 LiveData 和 Lifecycle 架构组件的使用: Android Jetpack组件之Lifecycle篇 Android Jetpack组件之LiveData篇 ViewModel 具有生命周期意识,会自动存储和管理 UI 相关的数据,即使设备配置发生变化后数据还会存在,我们就不需要在 onSaveInstanceState 保存数据,在 onCreate 中恢复数据了,使用 ViewModel 这部分工作就不需要我.

躬行之 1136

Android Jetpack架构组件(三)之ViewModel

ViewModel简介 在早期的Android开发中,由于应用相对较小,页面相对简单,我们会将数据请求、页面UI处理和数据加载全部放在Activity或Fragment中进行,但是随着项目的迭代,这种开发方式显得越来越臃肿,并且也不易于项目的维护和扩展。 此时,借鉴后端的后端程序的开发思路,我们对Android项目进行了分层,典型的有MVC,MVP和MVVM等项目分层,然后每层负责自己的事情即可。以现在流行的MVVM模式为例。 Model层:数据层,主要负责数据实体和对数据实体的操作。 View层:视图层

xiangzhihong8的专栏 1174

Android Jetpack架构组件:Lifecycle与ViewModel

Lifecycle组件是Android Jetpack架构的一部分,它提供了一种管理Activity和Fragment生命周期的标准方法。通过Lifecycle组件,开发者可以更好地管理UI组件的生命周期,从而避免内存泄漏和性能问题。在传统的Android开发中,开发者需要在Activity或Fragment的各个生命周期回调中编写大量代码来处理UI组件的状态变化。而Lifecycle组件的出现,让开发者能够以更简洁、更可靠的方式管理这些生命周期事件。

2501_92487360的博客 1115

TI官方PSpice for TI安装避坑指南:从申请Key到解决器件搜索栏空白(附详细步骤)

本文详细介绍了PSpice for TI的安装与配置全流程,包括申请Key、解决器件搜索栏空白等常见问题。通过分步指南和实战避坑技巧,帮助工程师高效完成安装并优化性能,确保电路仿真工具的正常使用。

weixin_29299807的博客 1085

Kill5.37版本下,使用ARMcomplier6编译__asm 函数报错的问题

Kill5-5.37版本下,使用ARMcomplier6编译__asm 函数报错的问题 问题简要描述: 昨日更新了keil5软件的版本,从5.17更新到了5.37版本,然后编译STM32项目文件时,软件提示编译报错。报错问题如下: Build started: Project: QKsoftware *** Using Compiler 'V6.18', folder: 'E:\MDK-ARM\ARM\ARM\ARMCLANG\Bin' Build target 'QKsoftware' compiling

weixin_43644424的博客 1万+

Android Jetpack架构组件之ViewModel入门到精通

要想获得食物,就必须一直寻找,只有这样,才有机会。不要气馁,就算找不到肥羊,至少能找到一只兔子——《狼道》 前言 一、简介 (1)ViewModel是什么 (2)ViewModel有什么用 (3)有什么优点 ​二、基本使用 (1)添加依赖 (2)继承ViewModel (3)使用方式 三、源码分析 四、总结 五、内容推荐 六、项目参考 前言 ——这篇主要是梳理...

斌林诚上的博客 2420

Linux系统centos7安装网卡驱动

有时候我们装完Centos或Ubuntu系统会发现没有网卡信息,说明网卡驱动不配置,所以我们要重新安装。 首先去服务器主板官网下载网卡驱动,注意32位和64位。 先查看网卡型号 lspci | grep -i ethernet 我的网卡型号是 00:1f.6 Ethernet controller: Intel Corporation Device 0d55。 网上一找,压根没找到这型号的网卡,别说驱动了。怀着试一试的心态,就安装i219-v系的网卡驱动,还别说,成功了。 针对i21...

wshc18的博客 2万+

Android Jetpack组件:LiveData与ViewModel

本文详细阐述了Android Jetpack组件中的LiveData与ViewModel。LiveData和ViewModel简化了数据管理过程,提高了应用性能。LiveData和ViewModel在实际开发中有广泛的应用场景,如界面数据加载和事件处理。为了编写更高效、更易于维护的Android应用,开发者应当熟练掌握LiveData和ViewModel。在未来,我们还可以期待Jetpack组件的更多功能和优化,以进一步提高开发效率。尽量使用LiveData和ViewModel来管理界面数据。

2501_92489038的博客 942

LibreNMS实战:5分钟搞定Docker部署与中文配置(附常见问题排查)

本文详细介绍了如何使用Docker在5分钟内快速部署LibreNMS,并完成中文界面优化。从环境准备到容器启动,再到中文语言包安装和系统配置调整,提供了完整的实战指南。同时,文章还包含常见问题排查和性能调优建议,帮助用户高效搭建网络监控系统。

e1f2g的博客 1281

Gradle进阶:4:结合Sonarqube进行代码审查

作为代码质量检查的流行工具,比如Sonarqube能够检查代码的“七宗罪”,跟代码结合起来能够更好地提高代码的质量,这篇文章将会介绍如何结合gradle和sonarqube对代码质量与测试覆盖率进行分析。

知行合一 止于至善 1万+

Jetpack组件android,Android Jetpack架构组件 ViewModel详解

前言前面两篇文章我们已经学习了Lifecycle和DataBind,本篇文章我们来学习Jetpack系列中比较重要的ViewModel,Jetpack的很多很多组件都是搭配使用的,所以单独的知识点可能会有些”无意义“但却是我们项目实战的基础!ViewModel的使用ViewModel类旨在以注重生命周期的方式存储和管理界面相关的数据。ViewModel类让数据可在发生屏幕旋转等配置更改后继续存在。...

weixin_34233974的博客 201

从 SOAUTH2 到系统用户,SAP AS ABAP 里配置 OAuth 2.0 Client 的完整落地思路

SAP OAuth 2.0客户端配置的核心在于建立系统级信任关系。在AS ABAP中,每个OAuth 2.0客户端必须关联一个System类型的用户账号(通过SU01创建),并建议采用业务语义明确的命名规范(如ZBTP_PO_APPROVAL_APP)。关键配置包括:客户端认证方式(推荐SSL证书而非共享密钥)、Token生命周期(默认3600秒)、Scope访问范围,以及根据应用场景选择Authorization Code或SAML 2.0 Bearer等授权模式。项目实践中应避免混合配置不同授权类型,而

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 988

Android Jetpack架构组件之ViewModel原理篇

上一篇文章讲了viewmodel的简单使用 Android Jetpack架构组件之ViewModel使用篇 一、ViewModel ViewModel是Jetpack AAC的重要组件,同时也有一个同名抽象类。 ViewModel,意为 视图模型,即为界面准备数据的模型。简单理解就是,ViewModel为UI层提供数据。独立的看ViewModel没有什么实际意义,更像是数据容器,结合LiveData使用更容易理解。 二、ViewModel的好处 1、Activity配置更改重建时(比如屏幕旋

sunbinkang的博客 582

【数据同化第二期】数据同化中三大理论基础之一(最小方差估计)

【数据同化第二期】深入理解数据同化及经典案例(最小方差估计)

WW、forever的博客 1596

C#每日面试题-属性和字段的区别

在C#面试中,“属性(Property)和字段(Field)的区别”是基础且高频的考点。很多初学者会把两者混为一谈,甚至觉得“属性就是加了get/set的字段”,但这种理解只停留在表面。面试考察的核心,是对“封装思想”的理解,以及两者在语法特性、底层实现、实际应用中的本质差异。今天我们从“基础认知→核心差异→底层原理→实际应用→面试避坑”五个层面,把这个知识点讲透,既保证新手能看懂,又能满足面试的深度要求。

Amon的专栏 779
上一篇: Android 使用Room操作数据库进行数据库版本的升级和迁移
下一篇: Android InputMethodManager进入页面后自动弹出软键盘
路宇
路宇 领域专家: 操作系统技术领域 领域专家: 操作系统技术领域
博客等级 码龄7年 3万+粉丝 312原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

路宇

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值