0

我将活动堆栈列表作为一个表单,但是一旦表单完成,我想清除除第一个活动之外的所有堆栈,但显示一个新活动,因此当点击新活动时将返回第一个活动。

例如 A -> B -> C -> D 然后变成 A -> E 这样在 D 上提交表单后,E 将对用户可见。

我要以这种方式启动吗?

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

2 回答 2

0

我认为正确的是FLAG_ACTIVITY_CLEAR_TOP

Intent intent = new Intent(getApplicationContext(), Home.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
于 2015-11-19T03:31:00.993 回答
0

当我想从应用程序中注销时,我将向您展示我的操作方式。

这可以让您完成活动 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);
}
于 2015-11-19T03:45:06.727 回答