#android #android-activity #android-intent #listactivity
#Android #android-активность #android-намерение #listactivity
Вопрос:
Мое приложение должно работать следующим образом:
- Действие # 1 содержит текстовое поле (
EditText
) и кнопку. - Если пользователь нажимает на кнопку, открывается диалоговое окно поиска с помощью
onSearchRequested()
. - Это вызывает действие # 2 с возможностью поиска, которое расширяется
ListActivity
. Он предоставляет список элементов черезsetListAdapter()
. - Если пользователь нажимает на элемент списка, действие # 2 должно передать текст выбранного элемента обратно в действие # 1 и отобразить его в текстовом поле.
Маркеры # 1-3 понятны и работают. Однако я понятия не имею, как реализовать # 4. Я знаю о возможности использования намерений, но это не сработает, если я использую намерение после onSearchRequested()
.
Спасибо,
Роберт
Ответ №1:
Для меня следующее решение работает нормально:
http://blog.dpdearing.com/2011/05/getting-android-to-call-onactivityresult-after-onsearchrequested/
Ответ №2:
Я бы просто отправил intent с выбранным вами элементом в качестве дополнительного ( putExtra
) вашему activity#1
(поскольку диалоговое окно поиска находится между activity#1
и activity#2
, вы не можете использовать startActivityForResult
для отправки результата обратно в activity#1
)
Если диалоговое окно поиска включено activity#1
, то вы можете использовать startActivityOnResult
(спасибо dmon)
Комментарии:
1. Хммм… Мне кажется, что диалоговое окно находится в действии № 1, поэтому он должен использовать
startActivityForResult()
и отправлять данные обратно из действия № 2 через намерение результата.2. если диалоговое окно находится в activity # 1, то действительно, вы правы, он должен использовать startActivityForResult. Я изобразил диалог как промежуточное действие вместо
Dialog
3. @dmon Диалоговое окно поиска является самостоятельным действием, то есть оно расширяется
ListActivity
.4. Ах, хитрый! Тогда, я думаю, вы могли бы создать «цепочку» результатов activity и распространить результат обратно «вверх»
5. вы можете, но если вашей поисковой активности не нужно знать результат
activity#2
, вы можете отправить intent extra вactivity#1
Ответ №3:
Простое и быстрое исправление: сохраните данные статически и выполните проверку для их извлечения в onResume() Activity # 1.