Подтвердить что ты не робот

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 назад?

Если нет, есть ли способ реализовать правильную навигацию вверх в этом приложении?

4b9b3361

Ответ 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 родителя. Затем, прочитав его, вы должны иметь возможность напрямую знать своего родителя, и это без необходимости создавать для него целый класс.