Android应用程序数据实现/在活动之间传递数据

时间:2014-09-03 19:09:07

标签: java android data-structures

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

我将举例说明我要做的事情。 我定义了一个容器对象,它包含某种不同类的对象的数据结构(比如一个arrayList)。 main活动显示arrayList中所有对象的listView。当用户从列表中选择一个项目时,我需要打开一个新活动,显示该对象的字段,用户可以编辑该字段。用户更改字段,按保存,然后重定向到第一个活动。

为了使其工作,我需要传递第二个活动对象。我知道我可以使用Serializable或Parcelable传递对象,但我需要能够编辑对象并将其发回。我的C ++大脑说只是使用pass-by-reference,但我的理解是Java中没有这个。

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

对不起,我是Android和Java的新手;我的大多数经验都是用C ++编写的。我只是在想这个问题错了吗?

感谢您花时间阅读!

1 个答案:

答案 0 :(得分:1)

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

第一步是实施Parcelableandroid docs非常直接,如果你环顾四周,有很多关于如何完成这个工作的例子。

您很可能会在ArrayList中显示ListView个对象。您可以通过在ListView的布局中添加Activity或使用扩展ListFragment的{​​{1}}将其作为独立视图执行此操作。在这两种情况下,都有方法可以告诉您单击列表中的哪个项目。对于Fragment,您可以实现ListView侦听器,该侦听器将为您提供单击列表中的位置。在onItemClick中,有ListFragment方法可以执行大致相同的操作。您应该查看这些课程的文档。

一旦你知道点击的位置,就可以获得点击的对象并通过onListItemClicked将其传递给下一个Intent(或通过{{1}中的参数发送它如果你正在开始一个新的片段)。

Activity

这会将对象发送到下一个活动(ActivityYouWantToStart)。要检索它,您可以在Bundle的{​​{1}}方法

中实施以下内容
Intent intent = new Intent(context, ActivityYouWantToStart.class);
intent.putExtra("KEY", object);
startActivity(intent)

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

要使对象恢复到原始活动,您基本上会反过来重复此过程。进行编辑,并在完成后通过意图返回。收到对象后,您可以将其重新添加到列表中,或者根据列表视图的实现方式重新加载整个列表。

编辑 - startActivityForResult

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

onCreate

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

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

此处RESULT_OK表示操作已完成。这次,不像以前那样启动活动,而是调用一个特殊的方法:

startActivityForResult

请务必在第一个活动中覆盖此方法并处理结果。它将额外返回到您的第一个活动,然后您可以更新列表。如果多个活动正在返回数据,则结果代码和请求代码可用于切换函数。