首页 文章

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

提问于
浏览
2

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

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

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

现在, Intent.FLAG_ACTIVITY_CLEAR_TOP 不起作用,我推测是因为我 finish() 登录活动意味着该活动不在后台堆栈中 . 我也在使用 Intent.FLAG_ACTIVITY_NEW_TASK ,它仍然可以按下后退按钮并向后导航他们应该登录访问的活动 .

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

我怎样才能做到这一点?

谢谢

2 回答

  • 0

    尝试

    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);
        }
    });
    
  • 4

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

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

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

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

相关问题