Уничтожить / завершить предыдущие действия из текущего фрагмента в Android

Я разрабатывал это приложение уже довольно давно и обнаружил эту ошибку в приложении. Первоначально, когда приложение загружается в первый раз, оно начинается с домашней активности. Затем взаимодействие с пользователем приведет приложение к активности 1, которая использует фрагмент 1. Фрагмент1 имеет кнопку. Если пользователь нажимает на эту кнопку, активность 1 вызывает метод finish() и загружает активность 2, вызывая startActivity (). Также, когда пользователь нажимает кнопку аппаратного возврата из сегмента 1, приложение возвращается к действию "Главная".

Таким образом, реальная проблема заключается в том, что, когда я нахожусь в активности 2 и завершаю () действие, приложение покажет домашнюю активность. Но я хочу полностью закрыть приложение по нажатию обратно из Activity2.

Ниже приведен код, который запускает действие 2 из фрагмента 1:

Intent intent = new Intent(context, Activity2.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
                startActivity(intent);
                ((Activity)context).finish();

Я понимаю, что домашняя деятельность никогда не была закончена ()- ред.

Итак, как мне уничтожить активность 1 и домашнюю активность при переходе к операции 2 и сделать активность 2 только оставшейся активностью в приложении?

Заранее спасибо.

2 ответа

Решение

Первый подход: используйте начальную активность для результата вместо начальной и завершите ее в onActivityResult.

Второй подход: зарегистрируйте локальную трансляцию в каждом требуемом действии и в приемнике завершите ее. С activtity2 отправьте эту трансляцию. Это завершит все те действия в стеке, когда эта трансляция будет зарегистрирована. Я использовал этот подход для реализации выхода из системы во многих приложениях, и он хорошо работает.

Итак, вот что я сделал (согласно @seema):

в домашнем действии я зарегистрировал вещательного приемника в методе OnCreate() этого действия.

IntentFilter filter = new IntentFilter();

    filter.addAction("com.example.CUSTOM_INTENT");
    registerReceiver(receiver, filter);
BroadcastReceiver receiver = new BroadcastReceiver() {

    @Override
    public void onReceive(Context context, Intent intent) {
        Log.d("==>","Broadcast Recieved.");
        finish();

    }
};

public void finish() {
    super.finish();
};

затем в деятельности 2 я рассылаю трансляцию

Intent local = new Intent();
    local.setAction("com.example.CUSTOM_INTENT");
    sendBroadcast(local);

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

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