Кнопка "вверх" ActionBar уничтожает родительскую активность, кнопка "назад" - нет
У меня есть относительно простое приложение для 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>
5 ответов
Вы можете изменить то, что должна делать кнопка вверх на панели действий:
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
onBackPressed();
return true;
}
return super.onOptionsItemSelected(item);
}
И воссоздать эффект кнопки назад.
В android manifest.xml у меня сработало добавление следующего атрибута для родительского тега активности.
android:launchMode="singleTop"
Ссылка: http://developer.android.com/guide/topics/manifest/activity-element.html
Задайте аналогичный вопрос: как правильно вернуться к родительскому занятию?
Когда вы указываете родительское действие в манифесте, оно перезапускается при нажатии на кнопку навигации вверх на панели действий.
проверить это я уже ответил на этот вопрос
/questions/31940376/vernites-k-fonovoj-aktivnosti-android/31940377#31940377
вам нужно переопределить кнопку навигации в панели действий, получив доступ к ней с помощью android.R.id.home в onOptionsItemSelected и завершить верхнюю активность.
Похоже, что ваши родительские действия не настроены должным образом в вашем манифесте. Добавьте это в свой тег активности 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>
<?xml version="1.0" encoding="utf-8"?>
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".WelcomeActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".MainActivity" />
<activity android:name=".StartActivity" />
<activity
android:name=".LoginActivity"
android:parentActivityName=".StartActivity"/>
<activity
android:name=".RegisterActivity"
android:parentActivityName=".StartActivity"/>
<activity android:name=".SettingActivity">
</activity>
</application>
Anyone can check this code and find error??/
Когда я нажимаю кнопку "Назад", приложение автоматически закрывается...