2015-05-15 1 views
1

У меня есть ситуация, когда у меня есть 3 вида деятельности.Возвращаясь к действию бабушки и дедушки (не родитель)

  1. ResultsActivity
  2. SimpleSearchActivity
  3. ComplexSearchActivity

Поток работает следующим образом: пользователь может выбрать поиск от ResultsActivity, который запустит SimpleSearchActivity. Оттуда пользователь может выполнить простой поиск. Результатом является возврат к активности результатов.

Однако из SimpleSearchActivity пользователь может выполнить сложный поиск, который завершит SimpleSearchActivity и запустит ComplexSearchActivity. Оттуда я хочу передать результат обратно в ResultsActivity. Я не уверен, как это сделать, поскольку это 3-е действие не было запущено с первого действия, а второе.

Опции Я рассмотрел:

  1. В комплексе поиска случае вернуться к ResultsActivity и запустить ComplexSearchActivity оттуда. Не уверен, что я действительно этого хочу, так как я не хочу, чтобы SimpleSearch закрывался, возвращаясь к результатам, а затем сразу же запустил Complex. Я волнуюсь, что это «запустит» ResultsActivity перед запуском ComplexSearchActivity.

  2. В сложном поисковом случае, из SimpleSearch запускает ComplexSearch с startActivityForResult (...), на сложной завершающей стадии простой поиск может захватить результат, а затем передать это обратно на активность результатов. Я не уверен, что эта цепочка будет работать. Даже если это так, я волнуюсь, что при сложном завершении SimpleSearchActivity будет «мигать», чтобы передать результаты назад.

  3. Храните результаты поиска в статической переменной где-то и на запуске ResultsActivity просто проверяйте эту статическую переменную, которая могла быть задана либо поисковой деятельностью. Тьфу!

  4. Я также думал о том, что у меня есть только одна активность поиска и вы можете показать/скрыть определенные поля (простые и сложные). Однако я запускаю простой поиск в виде активности диалога (в случае с планшетом) и сложного поиска в полноэкранном режиме. Поэтому я не могу использовать одну и ту же операцию поиска.

Идеи? Кто-нибудь пробовал что-то подобное раньше?

+1

Это может быть дубликат http://stackoverflow.com/questions/19772284/android-can-you-get-an-activity-result-from-a-chained-startactivityforresult?rq=1. Is showC.setFlags (Intent.FLAG_ACTIVITY_FORWARD_RESULT); ответ? – lostintranslation

ответ

2

Есть несколько способов вы можете достичь этого:

Вариант 1: Вы можете выбрать не закрыть SimpleSearchActivity при запуске ComplexSearchActivity. Вместо этого, получите ComplexSearchActivity, отправьте свой результат обратно на SimpleSearchActivity, а оттуда получите SimpleSearchActivity передать этот результат ResultsActivity.

Обновление: Это, по крайней мере, по моему опыту, не имеет «вспышки» UI; он должен выглядеть бесшовным.

Вариант 2: Используйте FLAG_ACTIVITY_FORWARD_RESULT, который существует именно для этой цели.

+0

Ваш вариант 1 был моим вариантом 2. Повлияет ли это на то, что SimpleSearchActivity снова «запустится» на экран после завершения ComplexSearch? Вариант 2 может быть лучшим ответом! – lostintranslation

+0

@lostintranslation См. Обновленный ответ. Я использовал этот метод много раз и никогда не видел, чтобы какой-либо пользовательский интерфейс мигал или мерцал. – pathfinderelite

+0

Вы не могли быть верны, спасибо за помощь! «Используйте FLAG_ACTIVITY_FORWARD_RESULT, который существует именно для этой цели». – lostintranslation

-1

Вы думаете о подходе к абстрактному слою данных, который должен быть общим для всех видов деятельности, а не иметь только определенную активность для хранения данных?

+0

Это не отвечает на вопрос OP. Запросы разъяснения должны быть опубликованы в виде комментариев. – pathfinderelite