0

0

Android中在启动的Activity中访问父Activity的数据成员

DDD

DDD

发布时间:2025-08-14 17:40:02

|

316人浏览过

|

来源于php中文网

原创

android中在启动的activity中访问父activity的数据成员

本文介绍了在Android应用中,如何在启动的子Activity中访问父Activity的数据成员。通过将业务逻辑迁移到ViewModel中,可以实现数据共享,避免直接访问父Activity对象,从而提高代码的可维护性和可测试性。本文将详细讲解ViewModel的使用方法,并提供示例代码。

在Android开发中,经常会遇到需要在启动的Activity(子Activity)中访问启动它的Activity(父Activity)的数据或方法的情况。虽然可以通过Intent传递简单的数据,但如果需要访问父Activity的复杂数据结构或调用其方法,直接传递对象可能会比较复杂,并且容易导致代码耦合。一种更优雅、更推荐的方式是使用ViewModel。

ViewModel简介

ViewModel是Android Jetpack组件库中的一个类,它旨在以生命周期感知的方式存储和管理UI相关的数据。ViewModel可以在配置更改(例如屏幕旋转)时保留数据,并且可以轻松地在多个Activity和Fragment之间共享数据。

使用ViewModel共享数据

  1. 创建ViewModel类

首先,创建一个继承自ViewModel的类,并将需要在Activity之间共享的数据和方法放在这个类中。

NT80 购物系统
NT80 购物系统

功能说明:1 会员可申请开店功能2 购买在线扣除金额3 冲值卡自动生成4 支持2级分类5 数据库压缩和备份6 会员分5个级别7 商品带讨论8 自带融合论坛,可关闭打开9 密码找回功能10 新闻``滚动新闻``帮助中心11 后台设置前台会员的上传权限12 可关闭/打开商店13 会员自助发布商品功能14 用户问题咨询管理

下载
import androidx.lifecycle.ViewModel;

public class MyViewModel extends ViewModel {
    private int a = 0;
    private int b = 0;
    private int result = 0;

    public void setA(int a) {
        this.a = a;
    }

    public void setB(int b) {
        this.b = b;
    }

    public int add() {
        result = a + b;
        return result;
    }

    public int getResult() {
        return result;
    }
}
  1. 在父Activity中使用ViewModel

在父Activity中,获取ViewModel的实例,并将需要传递的数据设置到ViewModel中。

import androidx.appcompat.app.AppCompatActivity;
import androidx.lifecycle.ViewModelProvider;

import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

public class BaseActivity extends AppCompatActivity {

    private Button btnCust;
    private MyViewModel viewModel;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_base);

        // 获取ViewModel实例
        viewModel = new ViewModelProvider(this).get(MyViewModel.class);

        btnCust = findViewById(R.id.btnCust);
        btnCust.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String flag = "CU";
                Intent i = new Intent(getBaseContext(), ChildActivity.class);
                i.putExtra("flag", flag);

                // 设置ViewModel中的数据
                viewModel.setA(20);
                viewModel.setB(50);

                startActivity(i);
            }
        });
    }

}
  1. 在子Activity中使用ViewModel

在子Activity中,同样获取ViewModel的实例,并从ViewModel中获取数据或调用方法。

import androidx.appcompat.app.AppCompatActivity;
import androidx.lifecycle.ViewModelProvider;

import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

public class ChildActivity extends AppCompatActivity {

    private Button btnCust;
    private MyViewModel viewModel;
    private TextView resultTextView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_child);

        // 获取ViewModel实例
        viewModel = new ViewModelProvider(this).get(MyViewModel.class);

        btnCust = findViewById(R.id.btnCust);
        resultTextView = findViewById(R.id.resultTextView);

        btnCust.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // 从ViewModel中获取数据并调用方法
                int addResult = viewModel.add();
                resultTextView.setText("Result: " + addResult);
            }
        });
    }
}

注意事项

  • ViewModel的生命周期比Activity长,它会在Activity销毁和重建时保留数据。
  • ViewModel不应持有Activity的引用,以避免内存泄漏。
  • ViewModel应该只包含UI相关的数据和逻辑,不应包含业务逻辑。业务逻辑应该放在Repository或UseCase中。
  • 可以使用ViewModelProvider来获取ViewModel的实例。ViewModelProvider会负责创建和管理ViewModel的生命周期。

总结

使用ViewModel可以有效地在Activity之间共享数据和方法,避免直接访问父Activity对象,从而提高代码的可维护性和可测试性。通过将业务逻辑迁移到ViewModel中,可以使Activity更加轻量级,专注于UI的展示和交互。ViewModel是Android开发中一个非常重要的组件,值得深入学习和掌握。

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
treenode的用法
treenode的用法

​在计算机编程领域,TreeNode是一种常见的数据结构,通常用于构建树形结构。在不同的编程语言中,TreeNode可能有不同的实现方式和用法,通常用于表示树的节点信息。更多关于treenode相关问题详情请看本专题下面的文章。php中文网欢迎大家前来学习。

536

2023.12.01

C++ 高效算法与数据结构
C++ 高效算法与数据结构

本专题讲解 C++ 中常用算法与数据结构的实现与优化,涵盖排序算法(快速排序、归并排序)、查找算法、图算法、动态规划、贪心算法等,并结合实际案例分析如何选择最优算法来提高程序效率。通过深入理解数据结构(链表、树、堆、哈希表等),帮助开发者提升 在复杂应用中的算法设计与性能优化能力。

17

2025.12.22

深入理解算法:高效算法与数据结构专题
深入理解算法:高效算法与数据结构专题

本专题专注于算法与数据结构的核心概念,适合想深入理解并提升编程能力的开发者。专题内容包括常见数据结构的实现与应用,如数组、链表、栈、队列、哈希表、树、图等;以及高效的排序算法、搜索算法、动态规划等经典算法。通过详细的讲解与复杂度分析,帮助开发者不仅能熟练运用这些基础知识,还能在实际编程中优化性能,提高代码的执行效率。本专题适合准备面试的开发者,也适合希望提高算法思维的编程爱好者。

24

2026.01.06

android开发三大框架
android开发三大框架

android开发三大框架是XUtil框架、volley框架、ImageLoader框架。本专题为大家提供android开发三大框架相关的各种文章、以及下载和课程。

281

2023.08.14

android是什么系统
android是什么系统

Android是一种功能强大、灵活可定制、应用丰富、多任务处理能力强、兼容性好、网络连接能力强的操作系统。本专题为大家提供android相关的文章、下载、课程内容,供大家免费下载体验。

1748

2023.08.22

android权限限制怎么解开
android权限限制怎么解开

android权限限制可以使用Root权限、第三方权限管理应用程序、ADB命令和Xposed框架解开。详细介绍:1、Root权限,通过获取Root权限,用户可以解锁所有权限,并对系统进行自定义和修改;2、第三方权限管理应用程序,用户可以轻松地控制和管理应用程序的权限;3、ADB命令,用户可以在设备上执行各种操作,包括解锁权限;4、Xposed框架,用户可以在不修改系统文件的情况下修改应用程序的行为和权限。

2029

2023.09.19

android重启应用的方法有哪些
android重启应用的方法有哪些

android重启应用有通过Intent、PendingIntent、系统服务、Runtime等方法。本专题为大家提供Android相关的文章、下载、课程内容,供大家免费下载体验。

276

2023.10.18

Android语音播放功能实现方法
Android语音播放功能实现方法

实现方法有使用MediaPlayer实现、使用SoundPool实现两种。可以根据具体的需求选择适合的方法进行实现。想了解更多语音播放的相关内容,可以阅读本专题下面的文章。

349

2024.03.01

c++ 根号
c++ 根号

本专题整合了c++根号相关教程,阅读专题下面的文章了解更多详细内容。

45

2026.01.23

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号