2016-08-06 3 views
0

В андроид приложение, которое я деятельность A, B и C.Отличия от вверх и назад кнопки

В исходном потоке я пользователь, видя активность А, прикоснувшись к кнопке приводит к активности B. Касание кнопки там ведет к действию C.

Альтернативный способ открыть приложение - это двойной щелчок на обоях (приложение - это BTW). Это готовит намерение для A с дополнительными функциями, которые читаются во время создания активности. Перед отображением A он готовит и запускает B и C, используя startActivities.

При запуске альтернативного потока я могу видеть C успешно, и нажатие на клавишу приводит меня к B. Нажатие на кнопку снова приводит меня к A. Это ожидаемое поведение с точки зрения пользователей, и это то, что я хочу. Однако, если вместо нажатия UP, я использую кнопку «Назад», чтобы перейти в C -> B -> A, до того, как появится A, логика запускается, а B -> C снова открывается.

Согласно моему коду, я ожидаю увидеть то, что вижу, когда я отжимаю назад, что нежелательно, но понятно.

a) Почему кнопка вверх ведет себя по-другому со спины в этом случае?

b) Какой самый чистый способ узнать, достиг ли я A извне приложения или нажатие либо назад, либо вверх, так что я могу использовать немного другую логику?

BTW Все 3 вида деятельности имеют свои собственные фрагменты, а в проекте используется кинжал и маслобойник.

EDIT: Я также заметил, что если я нахожусь на C, и я дважды нажимаю, я снова в A (у которого нет кнопки «вверх»), но если я вернусь, я увижу A во второй раз, как будто мой стек имеет 2 копии A. Предполагаемое поведение вместо этого будет покидать приложение. Связано это с android:launchMode?

ответ

0

вверх Кнопка приведет вас к вашей материнской деятельности, если вы определили его в файле манифеста, как цен ниже

</activity> 
     <activity 
     android:name=".SecondActivity" 
     android:label="@string/title_activity_second" 
     android:parentActivityName=".FirstActivity" > 
     <meta-data 
      android:name="android.support.PARENT_ACTIVITY" 
      android:value="com.example.android.home.app.FirstActivity" /> 
    </activity> 

В противном случае она будет действовать как обычную заднюю печать, это означает, что он закончит ток только активность.

Для вашего случая проверьте, завершаете ли вы активность B при переходе от B к C. Потому что, если вы получаете активность A на заднем нажатии, тогда в стеке есть только одна активность A. Активность B определяется как родительская активность для C, а активность A определяется как родительская активность для B, поэтому вы получаете активность A при двойном нажатии кнопки UP.

-1

После мастерить с режимом запуска, это то, что наконец-то работает для меня:

  • Declare A, B и C с android:launchMode="singleTop" сделал назад и вверх кнопки ведут себя таким же образом (обратите внимание, что B должен постоянно сохраняйте свое намерение)
  • Когда A запущен и обнаруживает дополнительные функции, он создаст новое намерение A без дополнительных функций и с setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK). Это заставит стек содержать новую свежую копию A, которая не перенаправляется на B или C

Обратите внимание, что это было нормально, потому что для его собственных представлений не требуется никаких дополнительных функций. Если бы это было так, мне пришлось бы передать посвященные дополнительные услуги моему новому намерению, чтобы избежать двусмысленности в тех случаях, когда он открывался в первый раз или когда возвращался с C.

В случае изменения намерений для однократных действий, по-видимому, нет чистого ответа, согласно этой теме: How to properly clear intent data from singleTop Activity?

Смежные вопросы