Кнопка 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>
Ответы
Ответ 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>