Навигация вверх и режим запуска singleTop

У меня есть действие A, и когда я нажимаю элемент панели инструментов, оно запускает действие B, используя startActivity (намерение). Всякий раз, когда я нажимаю кнопку «Назад» или значок навигации вверх, мое приложение закрывается. Я полагаю, это потому, что я использую launchMode="singleTop" в своей родительской активности (я использую это, потому что у меня есть представление поиска и конфигурация с возможностью поиска, потому что я не хочу запускать другой экземпляр моей активности для поиска ). Итак, вопрос: как я могу вернуться от дочерней активности (B) к родительской активности (A), используя как навигацию вверх, так и кнопку «Назад», не закрывая приложение? Я искал об этом и нашел кое-что о onNewIntent(). Если это мое решение, как мне правильно его использовать?


Вот мой файл манифеста:

        <activity
            android:name="com.example.fernando.inspectionrover.MainActivity"
            android:screenOrientation="landscape">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <action android:name="android.intent.action.SEARCH" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
            <meta-data
                android:name="android.app.searchable"
                android:resource="@xml/searchable" />
        </activity>
        <activity
            android:name="com.example.fernando.inspectionrover.BluetoothSettingsActivity"
            android:parentActivityName="com.example.fernando.inspectionrover.MainActivity"
            android:screenOrientation="landscape">
            <meta-data
                android:name="android.support.PARENT_ACTIVITY"
                android:value="com.example.fernando.inspectionrover.MainActivity" />

Вот как начать мою новую деятельность:

switch (id) {
            case R.id.bluetoothActivity:
                Intent switchActivity = new Intent(this, BluetoothSettingsActivity.class);
                startActivity(switchActivity);
                Log.i(LIFE_CYCLE, "Switching from " + getLocalClassName() + " to Bluetooth Setting Activity");
                finish();
                break;
        }

person Fernando Santos    schedule 29.03.2016    source источник


Ответы (2)


Я могу просто указать на самый простой ответ, но я думаю, что основная проблема заключается в том, что вы вызываете завершение после того, как начинаете новое действие. Это вызывает уничтожение для вызывающего действия и удаляет его из стека действий.

person grandpa_sam    schedule 29.03.2016
comment
именно в этом проблема :р - person johnny_crq; 29.03.2016
comment
Ваш голос только что дал репутации, чтобы проголосовать за вас. ;п - person grandpa_sam; 29.03.2016

Single Top означает, что если вы запустите активность, которая уже находится сверху, она не будет создана снова, а только возобновится.

Причина, по которой ваша обратная навигация закрывает приложение, заключается в том, что вы вызываете finish() сразу после запуска нового действия. Это означает, что вам больше не нужна эта активность, поэтому она удаляется из стека. Если вы вернетесь к ActivityB, приложение закроется, потому что возвращаться не к чему (вы звонили finish(), помните?

person johnny_crq    schedule 29.03.2016