Обновление ListView из AsyncTask, порожденного другой деятельностью - PullRequest
1 голос
/ 25 ноября 2011

У меня есть два действия: «EventsList», который расширяет ListView, и «CreateEvent».Пользователь может выбрать «События» из списка и редактировать их в действии CreateEvent.Когда пользователь нажимает сохранить CreateEvent, а затем создает AsycTask для передачи данных веб-службе, получает ответ и анализирует ответ в базе данных.

Моя проблема в том, что я не знаю, как передать результат из AsycTasks onPostExecute() в действие EventsList.Я попытался обновить список на StartActivityForResult, но к этому моменту поток часто не завершал себя.

Итак, как мне сообщить результат AsyncTask (порожденный CreateEvent) в действие EventsList?Мне не повезло, пытаясь использовать пользовательский обратный вызов.

Activity Interaction Diagram

Редактировать

Я действительно не заинтересован в использовании глобального флагаили adapter.Я уверен, что лучше всего это сделать с помощью callback / Listener.Таким образом, список изменяется или уведомляется только в случае крайней необходимости.

Ответы [ 3 ]

0 голосов
/ 25 ноября 2011

из EventsList startActivityForResult "CreateEvent".

внутри асинхронной задачи помещает данные в качестве putExtra в случае, если большой или сложный dataType вы хотите передать, используйте хранилище данных уровня приложения или статический экземпляр.

в onActivityResult EventsList читает данные по putExtra или статическому намерению.

0 голосов
/ 02 января 2014

Вы всегда можете использовать BroadcastReceiver и транслировать действие завершения из вашей AsyncTask onPostExecute() с любыми дополнительными функциями, которые вы хотите, чтобы ваша деятельность получала.Если вам нужно передать объект в результате, создайте объект модели, который реализует Parcelable, и отправьте Parcelable в качестве дополнительного в вашем намерении.

0 голосов
/ 25 ноября 2011

Я думаю, что если вы заполните данные о list adapter of EventsList активности (поскольку у адаптера есть глобальная ссылка) в AsyncTask и onPostExecute() в AsyncTask, то просто finish() the CreateEvent activity, что дает вам EventsList's onActivityResult(), теперь в этом просто вызове * 1006.*.

...