我已经看过,但无法在这里或任何地方找到与我的完全相同的问题。我也是 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
传递给下一个 Activity
或 Fragment
; (3) 重新加载/刷新列表。
第一步是实现Parcelable
。 android 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)。要检索它,您可以在 Activity
的 onCreate
方法中实现以下内容
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/