Возврат элемента списка из диалогового окна поиска в вызывающее действие

#android #android-activity #android-intent #listactivity

#Android #android-активность #android-намерение #listactivity

Вопрос:

Мое приложение должно работать следующим образом:

  1. Действие # 1 содержит текстовое поле ( EditText ) и кнопку.
  2. Если пользователь нажимает на кнопку, открывается диалоговое окно поиска с помощью onSearchRequested() .
  3. Это вызывает действие # 2 с возможностью поиска, которое расширяется ListActivity . Он предоставляет список элементов через setListAdapter() .
  4. Если пользователь нажимает на элемент списка, действие # 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.