Android 获取Activity返回值教程:从B到A的数据传递
"在Android应用开发中,有时我们需要从一个Activity(活动)跳转到另一个Activity,并在完成某些操作后返回第一个Activity,同时传递数据。本教程将介绍如何在Activity A中启动Activity B并获取B返回的值,以及涉及到的相关知识点。" 在Android开发中,Activity是用户界面的基本单元,它们可以通过Intent对象相互通信。在这个场景中,Activity A作为启动者,Activity B作为被启动者,用于展示联系人列表并允许用户选择一个联系人。一旦用户在B中做出选择,B会将选定的联系人信息返回给A,并更新A中的TextView。 首先,要在AndroidManifest.xml文件中声明Activity B,并赋予读取和写入联系人的权限,因为我们需要访问用户的联系人数据。如下所示: ```xml <uses-permission android:name="android.permission.READ_CONTACTS" /> <uses-permission android:name="android.permission.WRITE_CONTACTS" /> <activity android:name=".DemoActivity" android:label="选择联系人" > </activity> ``` 接下来,我们将在Activity A的布局文件中创建两个Button和两个EditText。一个Button用于启动Activity B,另一个Button可能是用来确认或保存选择。同时,我们需要给启动Activity B的Button注册点击事件,通常在XML布局文件中通过`android:onClick`属性指定一个方法名,如`click`: ```xml <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <EditText android:id="@+id/textView" android:layout_width="fill_parent" android:layout_height="wrap_content" /> <Button android:id="@+id/button1" android:layout_width="fill_parent" android:layout_height="wrap_content" android:onClick="click" android:text="选择一个联系人" /> <!-- 可能还有其他元素和按钮 --> </LinearLayout> ``` 在对应的Activity A的Java类中,我们需要实现`click`方法来启动Activity B。我们使用Intent对象来携带数据,并设置一个请求码以便在B返回时识别。启动Activity B的同时,可以传递一个额外的参数,例如请求码: ```java public class ActivityA extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_a); // ... 初始化其他组件 ... } public void click(View view) { Intent intent = new Intent(this, ActivityB.class); startActivityForResult(intent, REQUEST_CODE_SELECT_CONTACT); // 请求码 } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == REQUEST_CODE_SELECT_CONTACT && resultCode == RESULT_OK) { if (data != null) { String selectedContact = data.getStringExtra("selected_contact"); // 假设B通过这个key返回联系人信息 EditText textView = findViewById(R.id.textView); textView.setText(selectedContact); } } super.onActivityResult(requestCode, resultCode, data); } } ``` 在Activity B中,用户选择联系人后,我们需要创建一个新的Intent,将选择的联系人信息作为额外数据附加到Intent上,然后使用`setResult()`方法设置结果码和Intent,最后调用`finish()`方法关闭Activity B: ```java public class ActivityB extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_b); // ... 显示联系人列表并处理选择 ... // 假设contactName是用户选择的联系人姓名 Intent resultIntent = new Intent(); resultIntent.putExtra("selected_contact", contactName); setResult(RESULT_OK, resultIntent); // 结果码为RESULT_OK表示成功 finish(); } } ``` 总结来说,Android应用中,Activity间的通信主要通过Intent进行。在Activity A中,我们使用`startActivityForResult()`启动Activity B,并在B返回时通过`onActivityResult()`接收数据。Activity B通过`setResult()`将数据返回给A。在实际项目中,根据需求,返回的数据可以是任意类型,不只是字符串,也可以是自定义对象。理解这一机制对于构建复杂的Android应用程序至关重要。
下载后可阅读完整内容,剩余3页未读,立即下载
- 粉丝: 10
- 资源: 941
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 十种常见电感线圈电感量计算公式详解
- 军用车辆:CAN总线的集成与优势
- CAN总线在汽车智能换档系统中的作用与实现
- CAN总线数据超载问题及解决策略
- 汽车车身系统CAN总线设计与应用
- SAP企业需求深度剖析:财务会计与供应链的关键流程与改进策略
- CAN总线在发动机电控系统中的通信设计实践
- Spring与iBATIS整合:快速开发与比较分析
- CAN总线驱动的整车管理系统硬件设计详解
- CAN总线通讯智能节点设计与实现
- DSP实现电动汽车CAN总线通讯技术
- CAN协议网关设计:自动位速率检测与互连
- Xcode免证书调试iPad程序开发指南
- 分布式数据库查询优化算法探讨
- Win7安装VC++6.0完全指南:解决兼容性与Office冲突
- MFC实现学生信息管理系统:登录与数据库操作