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

Кнопка ActionBar 'up' уничтожает родительскую активность, 'назад' не

У меня есть относительно простое приложение для Android с одним Activity, показывающим список элементов, а другой - подробные сведения о выбранном элементе. Я запускаю активность списка, которая является моей самой верхней активностью (используя FLAG_ACTIVITY_CLEAR_TOP, чтобы очистить активность входа, из которой это вызвано):

Intent intent = new Intent(this, ListInstancesActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
finish();

и изнутри этого действия я воздействую на элемент, выбранный с помощью:

Intent detailIntent = new Intent(this, ShowInstanceActivity.class);
detailIntent.putExtra(ShowInstanceFragment.ARG_ITEM_ID, id);
startActivity(detailIntent);

Все работает нормально, и если я использую кнопку "назад" программной клавиши, я возвращаюсь к ListInstancesActivity, как и следовало ожидать. Однако, если вместо этого я нажимаю кнопку "назад/вверх" на панели действий, тогда он уничтожает и воссоздает ListInstancesActivity. Это плохо, так как это относительно дорого стоит сделать.

Как заставить панель действий вести себя так же, как и функциональная клавиша, и просто вернуться к предыдущей операции, а не уничтожить ее.

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

Соответствующими частями моего AndroidManifest.xml являются

<activity
  android:name=".agenda.ListInstancesActivity"
  android:label="@string/list_instances_activity_title">
</activity>
<activity
  android:name=".agenda.ShowInstanceActivity"
  android:label="@string/show_instance_activity_title"
  android:parentActivityName=".agenda.ListInstancesActivity">
</activity>
4b9b3361

Ответ 1

Вы можете переопределить, что должна сделать кнопка вверху панели действий:

public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {

case android.R.id.home:
    onBackPressed();
    return true;
}

return super.onOptionsItemSelected(item);
}

И заново создайте эффект обратной кнопки.

Ответ 2

В файле android manifest.xml добавлен следующий атрибут для тега родительской активности, который работал у меня.

android:launchMode="singleTop"

Ссылка: http://developer.android.com/guide/topics/manifest/activity-element.html

Обратите внимание на аналогичный вопрос: Как я могу вернуться к родительской активности правильно?

Ответ 3

когда вы указываете родительскую активность в манифесте, тогда он перезапускается, когда вы нажимаете на кнопку "Навигация" в панели действий.

проверить это, я уже ответил на этот вопрос

fooobar.com/questions/140376/...

вам нужно переопределить кнопку nevigation в панели действий, обратившись к ней с помощью android.R.id.home в onOptionsItemSelected и завершить верхнюю активность.

Ответ 4

Похоже, что ваша родительская активность неправильно настроена в вашем манифесте. Добавьте это в свой тег активности ShowInstanceActivity:

<meta-data android:name="android.support.PARENT_ACTIVITY" android:value=".agenda.ListInstancesActivity" />

Итак, ваш последний тег активности должен выглядеть так:

<activity
  android:name=".agenda.ShowInstanceActivity"
  android:label="@string/show_instance_activity_title"
  android:parentActivityName=".agenda.ListInstancesActivity">
  <meta-data android:name="android.support.PARENT_ACTIVITY" android:value=".agenda.ListInstancesActivity" />
</activity>