清除活动意图上的后退导航堆栈

时间:2012-01-29 17:49:38

标签: java android

我在申请开始时有一个登录视图。登录此视图时手动完成(即在代码中调用finish())。这样,当用户想要退出应用程序时,用户无需在登录页面之后按下后退按钮。

现在我希望在应用中有一个logout按钮。这会调用登录视图(意图删除任何以前存储的登录凭据 - 即模拟注销)。

我需要做的是清除此意图上的向后导航堆栈,否则用户仍然可以在最初导航时按下并查看应用程序。

现在,Intent.FLAG_ACTIVITY_CLEAR_TOP不起作用,我认为因为我finish() Login活动意味着该活动不在后台堆栈中。我也在使用Intent.FLAG_ACTIVITY_NEW_TASK,这似乎也不起作用。用户仍然可以按后退按钮并向后导航他们应该登录的活动以进行访问。

所以我需要做的是创建一个Login活动的实例,并将其作为我的应用程序的新root活动。

我该怎么做?

由于

2 个答案:

答案 0 :(得分:4)

尝试

Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP

这是来自一个适合我的应用程序..

homeButton.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {

            Intent intent = new Intent( _context, MainMenuActivity.class );
            intent.setFlags( Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
            _context.startActivity( intent );

            finish();       

            overridePendingTransition(R.anim.slide_right,R.anim.slide_right);
    }
});

答案 1 :(得分:0)

您应该将登录状态保存到本地数据存储(您可以使用SharedPreferences,或Application类或DB)。

然后,在您的activity的onStart()方法中,您应该检查登录状态,并向用户显示相应的UI。

换句话说,跟踪应用程序中某处的登录状态 - 然后每次显示“活动”时检查该状态,以确定是否应显示登录视图。

无论活动的切入点如何,您都可以控制向用户显示的内容。