Уничтожить / завершить предыдущие действия из текущего фрагмента в 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);
Это сработало так, как я того требовал. Таким образом, любая деятельность может быть уничтожена любой другой деятельностью.