Android для навигации по активности с несколькими родителями
У меня возникла проблема с внедрением навигации вверх в приложении с этим деревом навигации:
![App navigation tree]()
Стандартная реализация кнопки "Назад" в порядке.
Проблема при попытке реализовать кнопку "Вверх".
Что я ожидаю:
- когда пользователь находится на Подробно 5 Деятельность и нажмите кнопку вверх, приложение переходит в Список 3 Деятельность
- когда пользователь находится на Подробно 7 Деятельность и нажмите кнопку вверх, приложение вернется к Главная >
Итак, в разных выражениях, я хотел бы иметь такое поведение в back stack:
![app backstack clear]()
Документация для Android (Внедрение предков Навигация), чтобы использовать следующий код для обработки навигации вверх:
Intent parentActivityIntent = new Intent(this, MyParentActivity.class);
parentActivityIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(parentActivityIntent);
finish();
Но поскольку родительская активность Подробное действие отличается от различного пути навигации, я не знаю, какой она на самом деле. Поэтому я не могу назвать это в намерении.
Есть ли способ узнать реальную родительскую активность в стеке Android назад?
Если нет, есть ли способ реализовать правильную навигацию вверх в этом приложении?
Ответы
Ответ 1
Я буду придерживаться своего комментария к Полю:
Идея состоит в том, чтобы иметь стек последних Parent
пройденных действий. Пример:
public static Stack<Class<?>> parents = new Stack<Class<?>>();
Теперь во всех ваших родительских действиях (действия, которые считаются родителями - например, в вашем случае: "Список и домашний" ), вы добавляете это в свой onCreate
:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
parents.push(getClass());
//or better yet parents.push(getIntent()); as @jpardogo pointed
//of course change the other codes to make use of the Intent saved.
//... rest of your code
}
Если вы хотите вернуться к активности Parent
, вы можете использовать следующее (в соответствии с вашим кодом):
Intent parentActivityIntent = new Intent(this, parents.pop());
parentActivityIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(parentActivityIntent);
finish();
Я надеюсь, что я прав (:
Ответ 2
Этот сложный вопрос и, на мой взгляд, действительно показывает трудности в решении UX-решений Android для кнопки "вверх" . Поэтому нет четкого ответа на вашу проблему.
У меня есть два возможных решения для вас.
1. Нажимая кнопку "Назад".
Вы можете подумать о добавлении дополнительного к намерению запуска Detail из одного из его разных родителей. Это дополнительно сообщит о тех видах деятельности, которые они должны будут запускать при нажатии android.R.id.home
.
Это фактически означало бы, что ваше приложение "вернется" к его общему предку, вместо простого перезапуска Home.
Другим способом реализации этого может быть просто выполнение onBackPressed()
вместо запуска Home с Intent.FLAG_ACTIVITY_CLEAR_TOP
, но имейте в виду, что связанная анимация будет отличаться от обычного действия "вверх" .
2. Пропустите промежуточные действия и идите домой.
Некоторые приложения обрабатывают кнопку "вверх" как "домашнюю кнопку". Возможно, вам стоит подумать, что он просто всегда перезапускает Home с помощью Intent.FLAG_ACTIVITY_CLEAR_TOP
.
Ответ 3
Это старое сообщение наверняка, но, изучая SharedPreferences, я думаю, что это может быть возможность собрать эту информацию в данные sharedPreferences и каждый раз изменять ее значение перед тем, как спуститься на 2 родителя.
Затем, прочитав его, вы должны иметь возможность напрямую знать своего родителя, и это без необходимости создавать для него целый класс.