2012-01-29 60 views
2

我有我的应用程序开始时的登录视图。在此视图中登录时手动完成(即在代码中调用finish())。这样一来,当用户想要退出应用程序时,用户不必通过登录页面后退按钮。在活动意图清除导航堆栈

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

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

现在,Intent.FLAG_ACTIVITY_CLEAR_TOP不起作用,我推测是因为我的finish() Login活动表示该活动不在回栈中。我也使用Intent.FLAG_ACTIVITY_NEW_TASK这似乎也不工作。用户仍然可以按下后退按钮并通过他们应该登录访问的活动向后导航。

所以我需要做的是创建一个登录活动的实例,并使其成为我的应用程序的新的root活动。

我该怎么做?

感谢

回答

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); 
    } 
}); 
+0

好吧,伙计,谢谢你,我会试试这个。 – 2012-01-29 23:19:58

0

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

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

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

无论活动的入口点在哪里,您都可以控制向用户显示的内容。

+0

呀,这是一个好主意。我将着眼于实现这个前进。但现在,我会努力让自己的工作方式。 :) – 2012-01-29 23:20:38