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

Я разрабатывал это приложение уже довольно давно и обнаружил эту ошибку в приложении. Первоначально, когда приложение загружается в первый раз, оно запускается из домашней активности. Затем взаимодействие с пользователем перенаправит приложение к активности1, которая использует фрагмент1. > Фрагмент1 имеет кнопку. Если пользователь нажимает на эту кнопку, Activity1 вызывает метод finish() и загружает Activity2, вызывая startActivity(). Мероприятия.

Итак, реальная проблема здесь заключается в том, что когда я нахожусь в Activity2 и завершаю () действие, приложение будет отображать действие Home. Но я хочу полностью закрыть приложение при нажатии на кнопку 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 единственной оставшейся активностью в приложении?

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


person Yogesh    schedule 10.04.2015    source источник


Ответы (2)


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

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

person seema    schedule 10.04.2015
comment
спасибо ... я попробую - person Yogesh; 10.04.2015
comment
это работает. Я попробовал второй подход, так как увидел, что он более перспективен и подходит для моего приложения. - person Yogesh; 10.04.2015
comment
:) ... это мой первый пост о стеке над потоком ... так что я не знал, что должен принять ответ ... в любом случае, теперь он принят .. в любом случае, спасибо - person Yogesh; 10.04.2015

Итак, вот что я сделал (согласно @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();
};

затем в Activity2 я отправляю трансляцию

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

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

person Yogesh    schedule 10.04.2015