Как перейти в одно и то же родительское состояние

Из моего наблюдения от Gmail и TED-приложения поведение навигационной навигации будет ориентироваться на родителя с одним и тем же состоянием (позиция прокрутки), не похожее на то, что Google говорит в своем документе « Осуществить навигацию», например, как создать намерение родителя и запустить его.

Я реализую код из кода образца Android, и все состояние ушло (все дополнительные параметры, которые я ранее задал и прокручивал позицию). Каков правильный способ? Я не могу найти какой-либо документ в Android.

Ниже приведен код:

public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case android.R.id.home: Intent upIntent = new Intent(this, MyParentActivity.class); if (NavUtils.shouldUpRecreateTask(this, upIntent)) { // This activity is not part of the application's task, so create a new task // with a synthesized back stack. TaskStackBuilder.from(this) .addNextIntent(new Intent(this, MyGreatGrandParentActivity.class)) .addNextIntent(new Intent(this, MyGrandParentActivity.class)) .addNextIntent(upIntent) .startActivities(); finish(); } else { // This activity is part of the application's task, so simply // navigate up to the hierarchical parent activity. NavUtils.navigateUpTo(this, upIntent); } return true; } return super.onOptionsItemSelected(item); 

}

В моем случае я получил 3 действия, скажем, AB и C, когда пользователь перешел от A к BI, onCreate некоторые дополнительные функции, а onCreate BI использовал эти дополнительные функции для запроса данных из базы данных, чтобы заполнить мои строки, и когда я вернусь с C, все дополнительные функции исчезли Активность B ничего не показывает.

Solutions Collecting From Web of "Как перейти в одно и то же родительское состояние"

«Стандартное» поведение для активности android заключается в том, что создается новый экземпляр активности каждый раз, когда есть новое намерение для этого действия (см. Здесь launchMode-document). Из-за этого ваши дополнительные функции, кажется, исчезнут, если вы вызываете navigateUpTo.

В вашем случае я бы посоветовал использовать

 android:launchMode="singleTop" 

Для вашей родительской активности в вашем AndroidManifest.xml. Таким образом вы вернетесь к своей существующей деятельности (пока она находится на вершине задней части вашей задачи). Таким образом, ваши дополнительные функции будут сохранены.

Я тоже не понимаю, почему это не упоминается в документе Google, который вы цитируете, поскольку это похоже на поведение, которое вы ожидаете, если используете навигацию.

Это альтернативное решение принятого ответа :

Если вы не можете изменить launchMode своей активности или если родительская активность не находится поверх верхнего стека (например, A является родителем C), вы не можете использовать решение выше . В этом случае вам необходимо расширить свой вызов navigateUpTo чтобы сообщить о действии, что его нельзя воссоздавать, если он находится на задней панели:

 Intent intent = NavUtils.getParentActivityIntent(this); intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP); NavUtils.navigateUpTo(this, intent); 

Вы можете использовать это:

 @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case android.R.id.home: super.onBackPressed(); return true; } return super.onOptionsItemSelected(item); } 

У меня была аналогичная проблема, когда я вызвал startActivityForResult () в своем основном действии с фрагментами, а затем попытался вернуться к нему из вызываемого абонента с помощью навигации вверх. Решено путем внедрения Up navigation как:

 @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case android.R.id.home: setResult(RESULT_CANCELED); finish(); return true; } return super.onOptionsItemSelected(item); } 

В этом случае кнопка Up ведет себя как обычная кнопка «Назад», и все состояния сохраняются.

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

См. Сохранение состояния активности Android с помощью состояния «Сохранить экземпляр» для полного объяснения преацессии с кодом.