2011-04-19 81 views
2

后,我有3个活动:防止用户导航到活动注销

  1. LoginScreen。
  2. MainScreen。
  3. ProfileScreen。

的loginscreen是被称为第一次和登录按钮的点击我用下面的代码调用mainscreen活动的主要活动:

finish(); // I am calling finish because I don't want user to press back key at mainscreen and get back to login screen. 
Intent it = new Intent(LoginScreen.this,MainScreen.class); 
startActivity(it); 

在我mainscreen我有一个注销按钮我正在使用此代码进行登录:

finish(); 
Intent it = new Intent(MainScreen.this,LoginScreen.class); 
containerObject.startActivity(it); 

我不知道为什么,但此代码不会让我登录屏幕。

如果我更改代码从上面这段代码:

finish(); 
Intent it = new Intent(MainScreen.this,ProfileScreen.class); 
containerObject.startActivity(it); 

代码工作绝对没问题,并带我到profilescreen。

让我说清楚,我已经添加了所有3个活动来显示。

我是否因为“LoginScreen”是主要活动而出现此问题?

+3

我会推荐一个更好的方式来处理转换到登录屏幕,这将保持活动堆栈在一个传统的结构,并避免后退按钮问题。保持主屏幕为主要(默认)活动。在这里检查用户是否登录,如果没有,用'startActivityForResult'调用你的登录屏幕。 http://developer.android.com/reference/android/app/Activity.html#StartingActivities当用户登录后,使用'setResult()'退出登录活动,这会返回到主活动。 – 2011-04-19 06:49:24

+0

除了在第一条评论中提到,为什么你先打完finish()然后发送intent?尝试改变顺序。 – Zelimir 2011-04-19 08:16:54

+0

我很欣赏你的意见,但如果我们能够讨论这段代码出了什么问题,我们将非常感激。谢谢:) – necixy 2011-04-19 08:40:00

回答

0

比从未更好的迟到。

在你注销按钮单击处理程序,你必须开始使用 containerObject活动,因为你已经完成了MainScreen活动,所以 你必须去你的活动的父容器。

logoutButtonClick(../..[ 

    finish(); 
    Intent it = new Intent(MainScreen.this,LoginScreen.class); 
    containerObject.startActivity(it); 
} 

为了保证活动结束通话this.finish上单击处理程序中,而是开始你的意图后。

logoutButtonClick(../.. { 
    startActivity(new Intent(this, LoginScreen.class)); 
    this.finish(); 
} 

然后在LoginScreen活动中重写您的onBackPressed事件。所以012-后面会继续让用户登录屏幕。

@Override 
public void onBackPressed() { 
    startActivity(new Intent(this, LoginScreen.class)); 
    this.finish(); 
} 

我不知道你是怎么想管理您的三个活动之间的 应用程序的持续导航,所以我不会进入更详细的 ProfileScreen活动和之间导航其他两个,但我相信你有足够的信息来移动 与此。

当我想要保护我的应用程序的密码保护区域时,我会覆盖并管理我所有的后台事件并仔细管理整个应用程序和应用程序生命周期中的导航,因此应用程序无法关闭并重新打开用密码保护的活动。