Кнопка "вверх" 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??/

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

Другие вопросы по тегам