2011-04-19 53 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活動和之間導航其他兩個,但我相信你有足夠的信息來移動 與此。

當我想要保護我的應用程序的密碼保護區域時,我會覆蓋並管理我所有的後臺事件並仔細管理整個應用程序和應用程序生命週期中的導航,因此應用程序無法關閉並重新打開用密碼保護的活動。