我正在开发一个我遵循层次结构的应用程序,有一个用户可以登录的选项,之后我将完成登录活动。现在,一旦用户登录,我将把他带到一个新的活动假设"活动A"。从这个活动开始,一个新的活动开始被称为"活动B"没有完成"活动A"。最后有一个名为"活动C"它来自"活动B"没有完成"活动B"。所以目前所有这三项活动都是堆栈。
现在,每个屏幕或活动都有一个名为Logout的选项,如果用户在"活动A",我刚刚完成活动和打开登录活动。对于这种情况,它的工作正常,但一旦我切换到"活动B"或活动C"然后,如果用户按下Logout,我应该怎么做才能删除堆栈中的所有活动,并且我必须打开登录活动,因为我已经完成登录成功。
我知道API 11中有一个FLAG用于清除堆栈中的所有活动: -
Intent i = new Intent(mContext, LoginGateway.class);
// set the new task and clear flags
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK)
startActivity(i);
但是我从API 8支持它。我想要一个可以用于API 8的解决方案,请帮助我找到它。 任何帮助都会很明显。谢谢。
答案 0 :(得分:5)
Intent intent = new Intent(activity, LoginGateway.class);
ComponentName cn = intent.getComponent();
Intent mainIntent = IntentCompat.makeRestartActivityTask(cn);
activity.startActivity(mainIntent);
答案 1 :(得分:0)
尝试此变体
Intent i = new Intent(mContext, LoginGateway.class);
i.addFlag(Intent.FLAG_ACTIVITY_NO_HISTORY |
Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
startActivity(i);
答案 2 :(得分:0)
试试这个,我可以正常使用
// clear whole activity stack
Intent intent = new Intent("clearStackActivity");
intent.setType("text/plain");
sendBroadcast(intent);
// start your new activity
Intent intent = new Intent(OrderComplete.this,
MainActivity.class);
startActivity(intent);
步骤:1
将这些行放在所有活动的onCreate()方法中,或者如果你有任何基本活动,你可以将它放在那里,那么就不需要放入所有活动。
private KillReceiver clearActivityStack;
clearActivityStack = new KillReceiver();
registerReceiver(clearActivityStack, IntentFilter.create("clearStackActivity", "text/plain"));
步骤:2
将此课程置于您的基础活动
中private final class KillReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
finish();
}
}
说明:
在上面的代码中我们创建了自定义广播接收器。我们正在基本活动中注册它,即在所有调用的活动中注册。
当我们想要完成所有活动时,我们只是广播意图,所以注册此接收者的所有活动都将通知并完成它们自己。
答案 3 :(得分:0)
听起来像你想要的FLAG_ACTIVITY_CLEAR_TOP
。它自API 1起就可用。