
Android 获取Activity返回值教程:从B到A的数据传递
58KB |
更新于2024-08-28
| 181 浏览量 | 举报
收藏
"在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应用程序至关重要。
相关推荐




















weixin_38743235
- 粉丝: 11
最新资源
- 安卓APK运行时代码下载实现教程与源码分享
- Java仿京东商城源码及刮刮卡效果展示
- 经济预测方法MATLAB实现课程论文
- 多层膜结构图像处理源码:matlab计算反射透射率
- MATLAB源码实操:正弦函数连续小波变换教程
- EhLib.VCL 10.0: Delphi 控件包的最新版本发布
- CC2541基于Beacon室内定位及高斯金字塔matlab实战
- MATLAB项目实战:广义互相关函数与资源分配算法实现
- 脉冲噪声消除MATLAB算法源码下载及应用案例
- StellariaTechDemo1_4_0:时间序列MATLAB实战项目源码解析
- Java项目实战:手机商城源码与蓝牙传输工具详解
- Java项目源码分享网:学习与交流实战项目
- 免费获取Java航空订票系统源码与实战学习指南
- MSP430 C语言编程实例教程与源码
- Java集合与授权系统源码实战学习指南
- 深入研究Java中Statement与PreparedStatement的适用场景
- 深入解析Java源码:象棋实战项目学习指南
- Android圆形与线性进度条的Java实现指南
- 深入解析JAVA长连接与心跳机制及源码实战
- Java项目开发案例:水电费管理系统源码解析
- 掌握Java实战项目: HRSystem手写源码教程
- 掌握BIRT报表设计与Java源码加密技术
- 深入探究Java微服务架构源码与实战学习工具
- JavaWeb服务器源码解析与实战案例研究