Android: как очистить все действия в предыдущем стеке, кроме первого действия

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

Например. A -> B -> C -> D затем становится A -> E, поэтому E будет виден пользователю после отправки формы на D..

Я запускаю таким образом?

Intent message = new Intent();
message.setFlag(ACTIVITY_FLAG_CLEAR_TOP)
message.addClass(getContext(), E.class)
startActivity(E.class);

person LittleFunny    schedule 18.11.2015    source источник
comment
Вы можете использовать метод Finish() или добавить флаги к намерениям. stackoverflow.com/a/24524014/5577385   -  person CCL    schedule 19.11.2015
comment
Я думаю, что это не сработает. CLEAR_TOP означает, что если вы запустите A, B или C, действия над ним будут очищены. если вы используете Finish при запуске C и D, вы можете достичь A->E, но D не может вернуться к C, а C не может вернуться к B. в то время как если вы хотите A->B->C->D, тогда станьте A->E, одним из возможных способов является использование StartActivityForResult и обработка onActivityForResult в A, B, C, D, а в A вы запускаете E.   -  person RyanShao    schedule 19.11.2015
comment
Вы имеете в виду завершить каждое действие на каждом из onActivityForResult   -  person LittleFunny    schedule 19.11.2015


Ответы (2)


Я думаю, что правильный FLAG_ACTIVITY_CLEAR_TOP

Intent intent = new Intent(getApplicationContext(), Home.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
person cw fei    schedule 19.11.2015

Я покажу вам, как я это делаю, когда хочу выйти из приложения.

Это может помочь вам закончить действия B -> C -> D и начать действие A.

Сначала я создаю метод выхода в классе с подробностями сеанса.

public void logoutUser(){

    clearSharedPreferences();

    Intent broadcastIntent = new Intent();
    broadcastIntent.setAction("com.test.your.packgage.ACTION_LOGOUT");
    _context.sendBroadcast(broadcastIntent);

    // We send a broadcast to all registered activities
    // this way all activities will run finish ()
    // And they will be automatically closed
    LocalBroadcastManager.getInstance(_context).sendBroadcast(broadcastIntent);

}

public void clearSharedPreferences() {
    // Clearing all data from Shared Preferences
    editor.clear();
    editor.commit();
}

Затем в каждом действии вы должны сделать это:

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    IntentFilter intentFilter = new IntentFilter();
    intentFilter.addAction("com.test.your.packgage.ACTION_LOGOUT");
    registerReceiver(new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            Log.d("onReceive","Logout in progress");

            finish();
        }
    }, intentFilter);
}
person Jorge Casariego    schedule 19.11.2015