首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

安卓如何使用intent将数据回馈给mainActivity

在安卓开发中,Intent 是一种在不同组件之间传递数据的机制。如果你想从子活动(如 SecondActivity)向主活动(如 MainActivity)传递数据,可以使用 startActivityForResult 方法和 onActivityResult 回调。

基础概念

  1. Intent: 是安卓中用于在不同组件之间传递消息的机制。
  2. startActivityForResult: 这是一个旧的方法,用于从一个活动启动另一个活动并希望在该活动完成后返回结果。
  3. onActivityResult: 当从一个活动返回结果时,这个方法会被调用。

优势

  • 灵活性: 可以在活动之间传递各种类型的数据。
  • 解耦: 不同活动之间的逻辑可以保持独立。

类型

  • 显式Intent: 明确指定要启动的活动。
  • 隐式Intent: 不指定具体活动,由系统根据意图过滤器决定。

应用场景

  • 用户在子活动中输入数据后返回主活动。
  • 子活动完成某个任务后需要将结果告知主活动。

示例代码

MainActivity.java

代码语言:txt
复制
public class MainActivity extends AppCompatActivity {

    private static final int REQUEST_CODE = 123;

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

        Button button = findViewById(R.id.button);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(MainActivity.this, SecondActivity.class);
                startActivityForResult(intent, REQUEST_CODE);
            }
        });
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        if (requestCode == REQUEST_CODE && resultCode == RESULT_OK) {
            if (data != null) {
                String result = data.getStringExtra("result_key");
                // 处理从SecondActivity返回的数据
                Log.d("MainActivity", "Result Data: " + result);
            }
        }
    }
}

SecondActivity.java

代码语言:txt
复制
public class SecondActivity extends AppCompatActivity {

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

        Button button = findViewById(R.id.button_second);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent resultIntent = new Intent();
                resultIntent.putExtra("result_key", "这是来自SecondActivity的数据");
                setResult(RESULT_OK, resultIntent);
                finish();
            }
        });
    }
}

解释

  1. MainActivity 中通过 startActivityForResult 启动 SecondActivity
  2. SecondActivity 完成任务后,创建一个新的 Intent,将数据放入其中,并调用 setResult 方法设置结果码和数据,然后调用 finish 方法结束当前活动。
  3. MainActivity 中重写 onActivityResult 方法来接收从 SecondActivity 返回的数据。

注意事项

  • 从 Android 11 (API 级别 30) 开始,startActivityForResult 已被 registerForActivityResult API 替代,后者提供了更好的生命周期管理。
  • 确保在 AndroidManifest.xml 中正确声明所有活动。

解决常见问题

  • 数据丢失: 确保在 SecondActivity 中正确设置了 setResult 并调用了 finish
  • 回调未触发: 检查 requestCode 是否匹配,并确保 SecondActivity 正确设置了结果。

通过这种方式,你可以有效地在安卓活动之间传递数据,并处理返回的结果。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

《Android BLE 开发》--初学者

本作者是一位安卓初学者,之前学过JAVA,安卓只学过三天。《BLE Tool》也是我一个安卓项目,因为作者学习安卓加开发只用了10天时间,目前只是把所有接口打通了,只提供如何怎么实现。...device)) { mSearchBluetoothList.add(device); mBLENameList.add(device.getName()); } } } }); } }; 4.将扫描到的设备添加到...从第5点到第10的最终事项都需要调用回调函数,回调函数的实现,在MainActivity.java中添加以下代码: private final BluetoothGattCallback mGattCallback...intent = new Intent(action); sendBroadcast(intent); } private void broadcastUpdate(final String action..., final BluetoothGattCharacteristic characteristic) { final Intent intent = new Intent(action); final

93320
  • Android训练课程(Android Training) - 构建你的第一个应用

    构建你的第一个应用(app) 欢迎来到安卓开发! 这个课程教你如何构建你的第一个应用。你讲会学到如何去创建一个安卓工程和启动一个可以调试的应用的版本。...你将会学到一些安卓设计的基础,包括如何构建一个简单的用户界面和处理用户输入。...如何启动你的应用依赖这两项:你是否拥有一个真实的安卓动力的设备,和你是否使用Eclipse。...在真实设备上运行 如果你拥有一个安卓动力的设备,在这里展示了你如何安装和启动你的应用: 1.使用USB线将你的设备插入到你的开发机器(译者注:可能是电脑)上,如果你使用window是开发,你可能需要为你的设备安装适当的...为了在下一个 activity去查询这个扩展数据,你应该使用常量为intent的这个扩展数据定义一个key。

    2.2K00

    安卓增加或修改现有app apk的功能(apk功能扩展)

    摘要: 安卓增加或修改apk android apk app的功能(apk功能扩展)标签: smali,反编译apk,apk修改,apk合并,android app 功能扩展 现有apk不能满足需要...反编译到m目录下面;6、回编译命令:java -jar apktool.jar b -f m -o a.apk#将m目录下面smali代码回编译生成a.apk文件;二、为现有apk添加一个窗体。...= new Intent(context,MainActivity.class); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);...4、合并资源文件;将副apk的窗体使用到的资源文件复制到主apk的资源目录里面;res\layout\目录下的布局文件;res\drawable\使用到的图片;5、合并smali目录;在主msali目录中...副apk窗体将影响主apk的运行。从而达到增加或修改已有apk的功能。8、回编译修改后的主smali代码;9、签名回编译后的apk文件;10、运行测试合并后的apk,如果报错,根据错误信息修改。图片

    91620

    安卓第五夜 维纳斯的诞生

    之前各讲中,分别讲解了安卓的开发环境、架构和基本概念。从这一讲开始,我将制作一个简单的应用,并通过逐步升级它的功能,连带出安卓开发的多个情境。 《维纳斯的诞生》是文艺复兴早期名画。...从安卓第四夜 概念漫游(下)中,我们已经知道,这个XML文件描述了一个视图树。...当应用启动时,安卓将调用onCreate()方法。该方法有一个Bundle类型的参数,记录Activity的状态,我将在以后讲解。...可以注意到,安卓中用R来代表资源。 监听按钮的点击事件。因为我们在activity_main.xml中定义了按钮的id,所以可以使用findViewById方法,便捷的引用按钮。...View元素可以使用setOnClickListner()方法,为点击事件增加OnClickListener类型的监听对象。 用户点击按钮后,安卓将执行监听对象的onClick()方法。

    1.4K70

    安卓第五夜 维纳斯的诞生

    之前各讲中,分别讲解了安卓的开发环境、架构和基本概念。从这一讲开始,我将制作一个简单的应用,并通过逐步升级它的功能,连带出安卓开发的多个情境。 《维纳斯的诞生》是文艺复兴早期名画。...从安卓第四夜 概念漫游(下)中,我们已经知道,这个XML文件描述了一个视图树。...当应用启动时,安卓将调用onCreate()方法。该方法有一个Bundle类型的参数,记录Activity的状态,我将在以后讲解。...可以注意到,安卓中用R来代表资源。 监听按钮的点击事件。因为我们在activity_main.xml中定义了按钮的id,所以可以使用findViewById方法,便捷的引用按钮。...View元素可以使用setOnClickListner()方法,为点击事件增加OnClickListener类型的监听对象。 用户点击按钮后,安卓将执行监听对象的onClick()方法。

    1.1K30

    物联网项目 | LeanCloud+树莓派+安卓实现住宅环境异常告警系统

    完成后的树莓派和传感器 目录 前言 目录 物料清单 软件架构 室内环境条件监控模块 手机监视APP模块 硬件模块使用 DHT11温湿度传感器 MQ-2烟雾传感器 云后端接入与使用 为安卓用户端接入LeanCloud...数据及消息推送SDK LeanCloud安卓SDK初始化 LeanCloud安卓消息推送服务初始化 LeanCloud安卓消息推送服务接入完成测试 为用户端监测硬件 —— 树莓派接入LeanCloud...云后端的作用就是充当手机APP和物联网硬件之间的桥梁,也就是我们的树莓派和安卓APP之间用于推送消息以及保存传感器数据的中间人。...为安卓用户端接入LeanCloud数据及消息推送SDK 按照官方文档中对于Java SDK的说明,在Android Studio中使用Gradle引入LeanCloud的数据存储和消息推送的Java SDK...App详细设计 为了减少项目复杂度,本项目采用最简单的安卓开发模式:MVC。一个MainActivity和对应界面即可。

    1.4K21

    安卓第十夜 亚当的诞生

    这一讲我将介绍如何在安卓内部直接进行HTTP通信。 《亚当的诞生》,西斯廷礼拜堂的吊顶画,米开朗基罗之作。当时的教皇强迫沉迷于雕塑的米开朗基罗画巨幅壁画。...描述 这一讲中,我将使用JSON,将数据库备份到远程的数据库中。反过来我也将从远程数据库中抓取条目,并放入安卓的数据库。...相关的安卓知识点包括: 线程 HTTP通信 JSON 增加ActionBar 我首先在首页上增加一菜单,用于触发下载和上传功能。这是通过ActionBar实现的。...MainActivity将继承ActionBarActivity。这样,MainActivity页面的顶端将增加一条ActionBar。接下来,我要覆盖ActionBarActivity的两个方法。...HTTP获得数据 下一步,我将增加"Download"按钮点击后的功能。按钮点击后,应用将访问互联网,并获得URL指向的.js文件。

    1.1K90

    安卓天气预报app(三)——城市管理、数据库操作

    ✅简易的安卓天气app(一)——解析Json数据、数据类封装 ✅简易的安卓天气app(二)——适配器、每小时数据展示 简易的安卓天气app(三)——城市管理、数据库操作 ✅简易的安卓天气app(四)—...(源码见页尾✨) 本项目用到的天气api接口天气api 详细操作内容见第一篇-->简易的安卓天气app(一)——解析Json数据<-- 此接口当我们默认不拼接参数,直接访问会得到当前位置的温度Json...所以接下来就是进行安卓SQLite数据库的一些操作,把当前位置信息保存到数据库中(城市名,城市温度,更新时间) 待实现效果: 数据库成功插入当前位置数据信息(之前测试插入过几条的测试对照用数据):...一些基本的方法写好后就是MainActivity.java文件,用Intent跳转到城市管理界面,注意先引入数据库操作工具 DBUtils dbUtils = new DBUtils(MainActivity.this...intent = new Intent(CityManagerActivity.this,MainActivity.class); intent.putExtra("selectedCity

    1.5K30

    安卓第八夜 玛丽莲梦露

    事件发生后,安卓将调用的该方法。我们用setOnClickListener的方法,让MainActivity同时监听两个按钮的点击事件。当事件触发后,安卓调用onClick()方法。...可以看到,点击id为category的按钮后,安卓将启动CategoryActivity按钮。这就是我们下一步将要编写的。...使用ArrayAdapter CategoryActivity将以条目的方式来显示数据库中存储的所有Category,即联系人的类别。我在上一讲中,已经将数据存储到了SQLite数据库中。...安卓提供了ArrayAdapter类,可以综合以上功能。它可以为每个数据元素赋予相同的视图格式。将ListView与ArrayAdapter绑定后,安卓就可以动态的调整条目了。 ?...使用setTag()优化CategoryAdapter 上面已经提到,ArrayAdapter可以通过重复利用条目视图,来优化安卓应用的效率。

    1.9K90

    安卓第六夜 凡高的自画像

    利用Intent,启动一个新的Activity。 文本输入。增加EditText输入栏,让用户输入文本信息。 数据存储。将数据存入SharedPreferences,跨Activity读取。...在提交数据后,这个Activity将通过EditText的getText()方法获取字符输入。提交的字符串将使用SharedPreferences存储起来。...使用SharedPreferences.Editor类对象写入数据时,我们调用了putString()方法,以存储字符串类型的数据值。commit()方法将执行写入。...该方法执行后,新的SelfEditActivity将压入栈顶,成为激活的Activity,而MainActivity将暂停。 另一方面,我把数据读取部分放入了onResume()方法。...根据安卓的规定,MainActivity第一次运行,以及每次从暂停中复苏时,都会调用该方法。用户在SelfEditActivity修改返回后,就可以立即获得最新的数据。

    1.2K70

    安卓第八夜 玛丽莲梦露

    事件发生后,安卓将调用的该方法。我们用setOnClickListener的方法,让MainActivity同时监听两个按钮的点击事件。当事件触发后,安卓调用onClick()方法。...可以看到,点击id为category的按钮后,安卓将启动CategoryActivity按钮。这就是我们下一步将要编写的。...使用ArrayAdapter CategoryActivity将以条目的方式来显示数据库中存储的所有Category,即联系人的类别。我在上一讲中,已经将数据存储到了SQLite数据库中。...安卓提供了ArrayAdapter类,可以综合以上功能。它可以为每个数据元素赋予相同的视图格式。将ListView与ArrayAdapter绑定后,安卓就可以动态的调整条目了。 ?...使用setTag()优化CategoryAdapter 上面已经提到,ArrayAdapter可以通过重复利用条目视图,来优化安卓应用的效率。

    61710

    BS1057-基于安卓+websocket实现互联网轻博客系统

    基于安卓的互联网轻博客系统的设计与实现,系统主要采用安卓+mysql数据技术,通过实现用户注册登录,用户线上发布博客,用户个人资料管理,博文分享等功能,以实现博客资源在朋友圈之间的分享传递,原文地址一、...程序设计本次基于安卓的互联网轻博客系统,主要内容涉及:主要功能模块:用户注册登录,用户线上发布博客,用户个人资料管理,博文分享等功能等主要包含技术:java,安卓,html,javascript,mysql...主要包含算法:数据分析计算等二、效果实现系统效果图片其他效果省略核心代码 public void onClick(View v) { Intent intent=null;...intent = new Intent(LoginActivity.this, MainActivity.class); startActivity...=new Intent(this,RegisterActivity.class); startActivity(intent); overridePendingTransition

    37620

    全栈工程师必备:安卓移动端手机开发,第六课

    本系列课程 致力于老手程序员可以快速入门学习安卓开发。系统全面的从一个.Net程序员的角度一步步学习总结安卓开发。...上篇课程:安卓一步步从基础到精通自学教程,纯实战,纯干货(五) 简单计算器程序 前台界面如何与后台处理类联系在一起。 上一课我们已经把计算器的前台页面搭建完成了,本次我们将实现真正的加法计算器功能。...安卓程序的开发类似于我们学习过的ASP.Net和Winform ,也有前台页面和后台处理程序之分。 所对应的安卓处理程序在这里 不知大家有没有发现。这两个对应的命名方式或有有些规律。是的 。...如图: 所以说 我们这个MainActivity绑定的就是activity_main这个前台界面。 ? 2.前台控件如何与后台处理类联系在一起?...如何获取文本框输入的字符 ? 分析需求: 流程:获取到文本框1和文本框2用户输入的数字 , 点击按钮3时 后台会把前两个数据相加,反馈给4显示。 ? 要想实现很简单: 前台界面: ? ?

    56230

    学习笔记 | Android Studio安卓开发入门经验总结 干货

    DISTRIBUTION表示如果支持该安卓版本以上设备,则预估能支持安卓设备占所有安卓设备的百分比。...(“param1”,paramString1);//通过intent传送额外数据,可以在目标Activity中,使用getIntent()获取传入的intent对象,利用该intent对象的getStringExtra...startActivity(intent); 值得注意的是,Intent所能传输的数据容量是有上限的,过多的数据不建议使用Intent进行传输。...和ListView类似,要将数据适配到视图上进行展示需要使用适配器Adapter,不同的是RecyclerView的BaseAdapter已经将viewholder模式封装好了,而目前RecyclerView...3.3.6 适配器理念Adapter 如上所说,列表视图需要一个中间件:适配器,来将数据适配到布局上,这是一个从结构化的数据到结构化的视图的中间过程,纵观整个项目开发,可以发现有很多地方在使用这样的理念

    2.5K60
    领券