it-swarm.com.ru

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

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

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

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

return super.onOptionsItemSelected(item);
}

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

29
Aashir

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

Android:launchMode="singleTop"

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

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

92
vikki_logs

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

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

https://stackoverflow.com/a/32401235/3479012

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

3
Jolson Da Costa

Похоже, что ваши родительские действия не настроены должным образом в вашем манифесте. Добавьте это в свой тег активности 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>
1
T3KBAU5
 <?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??/

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

0
Syed Junaid