2011-11-25 86 views
1

我有两个活动“EventsList”,它扩展了ListView和一个“CreateEvent”活动。用户可以从列表中选择“事件”并在CreateEvent活动中编辑它们。当用户点击保存CreateEvent时,会产生一个AsycTask将数据传递给Web服务,获取响应并将响应解析到数据库中。从AsyncTask更新一个列表视图产生在另一个活动

我的问题是我不知道如何将结果从AsycTasks onPostExecute()传达给EventsList活动。我试着刷新StartActivityForResult的列表,但是这个线程通常还没有完成。

那么,如何将AsyncTask(由CreateEvent产生)的结果传递给EventsList活动?我没有尝试使用自定义回调。

Activity Interaction Diagram

编辑

我真的不热衷于使用全局标志或adapter。我确信这最好是用某种方式使用回调/监听器完成的。这样,只有在绝对必要时才会更改或通知列表。

+0

StartActivityForResult()似乎是更好的方法。可能的解决方法是在您的CreateEventActivity中,在启动AsyncTask后不要立即返回EventsListActivity,而是显示用户ProgressDialog,等待AsyncTask完成,在CreateEventActivity中设置setResult(),然后返回EventsListActivity,不确定这是否工作正常值得去尝试。 – yorkw

回答

0

我觉得如果你在AsyncTask填写list adapter of EventsList活动的数据(如适配器具有全球参考)和的AsyncTask的onPostExecute()只是finish() the CreateEvent activity现在借给你EventsList's onActivityResult()在这个只需要调用notifydatasetChanged() for adapter

+0

我可以使适配器全球化,但它似乎有点不合格(我仍然可以做到这一点)。 onActivityResult不起作用,因为当CreateEvent活动完成时,AsnycTask通常还没有完成。回电不是更好的选择吗? – JonWells

0

from EventsList startActivityForResult“CreateEvent”。

里面的异步任务把数据putExtra的情况下,你想传输大或复杂的dataType使用应用程序级别的数据存储或静态实例。

onActivityResult of EventsList通过putExtra或静态意图读取数据。

0

您可以随时使用BroadcastReceiver,并从您的AsyncTask的onPostExecute()广播一个完成操作,以及您希望活动接收的任何附加内容。如果您需要在结果中传递对象,请创建一个实现Parcelable的模型对象,并将Parcelable作为附加意图发送。