java - Android应用程序数据实现/Activity之间传递数据

标签 java android data-structures

我已经看过,但无法在这里或任何地方找到与我的完全相同的问题。我也是 Android 开发新手,所以我正在尝试找出解决这个编程问题的最佳方法。

我将举一个我正在尝试做的事情的例子。 我定义了一个容器对象,其中包含不同类的对象的某种数据结构(例如 arrayList)。主 Activity 显示 arrayList 中所有对象的 listView。当用户从列表中选择一个项目时,我需要打开一个新 Activity 来显示该对象的字段,用户可以编辑这些字段。用户更改字段,按“保存”,然后重定向到第一个 Activity 。

为了使其工作,我需要将对象传递给第二个 Activity 。我知道我可以使用 Serialized 或 Parcelable 来传递对象,但我需要能够编辑该对象并将其发回。我的 C++ 大脑说只使用引用传递,但我的理解是这在 Java 中不可用。

我看了一下这里:http://developer.android.com/guide/faq/framework.html#3 ,但我认为这里提供的任何解决方案都不能解决我的问题。

很抱歉,我是 Android 和 Java 新手;我的大部分经验都是在 C++ 方面的。难道是我把问题想错了?

感谢您花时间阅读!

最佳答案

你的直觉是对的。执行您所描述的操作的正确方法是(1)在要在 Activity 之间传递的对象中实现 Parcelable 接口(interface); (2) 将点击的对象通过 Intent 传递给下一个 ActivityFragment; (3) 重新加载/刷新列表。

第一步是实现Parcelableandroid docs非常简单,如果您环顾四周,就会发现很多关于如何完成此操作的示例。

您很可能会在 ListView 中显示对象的 ArrayList。您可以将 ListView 添加到 Activity 的布局中,或者使用扩展 ListFragment 来将其作为独立 View 来执行此操作 fragment 。在这两种情况下,都有一些方法可以告诉您单击了列表中的哪个项目。对于ListView,您可以实现一个onItemClick监听器,它将为您提供列表中被单击的位置。在 ListFragment 中,有一个 onListItemClicked 方法可以执行大致相同的操作。您应该查看这些类的文档。

一旦你知道了被点击的位置,你就可以获取被点击的对象,并通过Intent将其传递给下一个Activity(或通过参数发送它)如果您要开始一个新 fragment ,则在 Bundle 中)。

Intent intent = new Intent(context, ActivityYouWantToStart.class);
intent.putExtra("KEY", object);
startActivity(intent)

这会将对象发送到下一个 Activity (ActivityYouWantToStart)。要检索它,您可以在 ActivityonCreate 方法中实现以下内容

Bundle stuffYouSent = getIntent().getExtras();
if(stuffYouSent != null){
     Object o = stuffYouSent.getParcelable("KEY");
     //do something
}

当然,您可以将类从对象更改为您发送的任何内容,只需相应地转换结果即可。

要使对象返回到原始 Activity ,您实际上需要反向重复此过程。进行编辑,完成后按 Intent 返回。收到对象后,您可以将其重新添加到列表中或重新加载整个列表,具体取决于 ListView 的实现方式。

编辑 - startActivityForResult

当您知道将返回第一个 Activity 时,您可以使用 startActivityForResult,而不是简单地开始下一个 Activity 。您可以看到one example here但在你的上下文中:

Intent intent = new Intent(context, ActivityYouWantToStart.class);
intent.putExtra("KEY", object);
startActivityForResult(intent, REQUEST_CODE);

在这里,您仍然将对象传递给下一个 Activity ,但指定一个“REQUEST_CODE”来指示收到 Intent 时要执行的操作。当 Intent 启动第二个 Activity 时,您可以像平常一样处理 Intent 。完成后,将数据传递回第一个 Activity ,如下所示

Intent returnIntent = new Intent();
returnIntent.putExtra("result", result);
setResult(RESULT_OK, returnIntent);
finish();

这里的RESULT_OK表示操作已完成。这次,将调用一个特殊的方法,而不是像之前那样启动 Activity:

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    //do something
}

请务必在您的第一个 Activity 中重写此方法并处理结果。它将把额外的内容返回到您的第一个 Activity ,然后您可以在其中更新列表。如果多个 Activity 正在返回数据,则结果代码和请求代码可用于切换功能。

关于java - Android应用程序数据实现/Activity之间传递数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25651929/

相关文章:

android - 如何为多窗口模式配置应用程序?

matlab - Matlab中的动态平衡数据结构?

arrays - 具有 c 维对象的 N 维数组与具有 C 对象的 N 维数组的性能有何不同?

java - 期望 removeOnTabSelectedListener 表达式?

android - 如何以编程方式关闭网络浏览器?

java - 在 Java 中使用 "super"和 "?"

javascript - Phonegap 构建、HTML5 音频、Android

scala - 在 Scala 中创建最小堆最简单、最有效的方法是什么?

java - apache commons ftp 连接纯文本但授权 SSL

java - 如何将带有条件的 for 迭代转换为 Java 8 流