file-type

Android 获取Activity返回值教程:从B到A的数据传递

PDF文件

58KB | 更新于2024-08-28 | 181 浏览量 | 1 下载量 举报 收藏
download 立即下载
"在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
上传资源 快速赚钱