我看过,但在这里或任何与我完全相同的地方找不到问题。我也是android开发的新手,所以我试图找出解决这个编程问题的最佳方法。
我将举例说明我要做的事情。 我定义了一个容器对象,它包含某种不同类的对象的数据结构(比如一个arrayList)。 main活动显示arrayList中所有对象的listView。当用户从列表中选择一个项目时,我需要打开一个新活动,显示该对象的字段,用户可以编辑该字段。用户更改字段,按保存,然后重定向到第一个活动。
为了使其工作,我需要传递第二个活动对象。我知道我可以使用Serializable或Parcelable传递对象,但我需要能够编辑对象并将其发回。我的C ++大脑说只是使用pass-by-reference,但我的理解是Java中没有这个。
我在这里看了一下:http://developer.android.com/guide/faq/framework.html#3,但我不认为这里提供的任何解决方案都能解决我的问题。
对不起,我是Android和Java的新手;我的大多数经验都是用C ++编写的。我只是在想这个问题错了吗?
感谢您花时间阅读!
答案 0 :(得分:1)
你的直觉是正确的。执行所描述的正确方法是(1)在要在活动之间传递的对象中实现Parcelable
接口; (2)通过Intent
将点击的对象传递给下一个Activity
或Fragment
; (3)重新加载/刷新列表。
第一步是实施Parcelable
。 android 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
请务必在第一个活动中覆盖此方法并处理结果。它将额外返回到您的第一个活动,然后您可以更新列表。如果多个活动正在返回数据,则结果代码和请求代码可用于切换函数。