2011-07-05 120 views
3

我正在處理一個具有多個活動的應用程序,問題是我希望用戶能夠通過按下按鈕註銷。當我去一個活動時清除活動堆棧

假設我們有4個活動命名爲A,B,C,D。活動的導航,如B-> C-> D。

活動D用戶有註銷選項。當用戶點擊註銷按鈕時,他會轉到未在導航中調用的活動A.現在,後退按鈕用戶點擊,然後他到了之前的活動就像活動D.

我已經嘗試過推出具備以下兩個標誌的活動:

Intent intent = new Intent(this, LoginActivity.class); 
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);   
startActivity(intent); 

誰能幫助?

回答

4

好吧,我讓自己成爲一個小項目,有點模擬你有什麼。我將在下面的代碼中省略進口。另外,閱讀所有的代碼和評論,我沒有寫他們讓你跳過它們。我們稱之爲類飛濺,登錄,page1,page2和page3。在你的splash類中,在onCreate()方法之前,讓我們舉幾個例子。

package com.test.jeets; 

public class splash extends Activity { 

    //Add all of these right here! 
    public static boolean loggedin = false; 
    public static int sdk = new Integer(Build.VERSION.SDK).intValue(); 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.splash); 
     //This is your splash screen, all the code goes here! 
    } 
} 

現在,這就是你的閃屏!完成!對於登錄屏幕,我們要確保它不能回到啓動屏幕,而是在按下後退時退出應用程序。這很容易!我們只需重寫後退按鈕並使用moveTaskToBack(true)

package com.test.jeets; 

public class login extends Activity { 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.login); 

     //This is the login page stuff. Nothing special needs done here. 
    } 
    @Override 
    public boolean onKeyDown(int keyCode, KeyEvent event) { 
     if (splash.sdk < 5 && keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) { 
      onBackPressed(); 
     } 

     return super.onKeyDown(keyCode, event); 
    } 
    //This will make the back button exit the app to the home screen. 
    @Override 
    public void onBackPressed() { 
     moveTaskToBack(true); 
     return; 
    } 
    //If the user leaves the app from the login screen while not logged in, they are returned to the splash screen. 
    @Override 
    public void onRestart() { 
     super.onRestart(); 
     if(splash.loggedin == false){ 
     Intent i = new Intent(login.this, splash.class); 
     startActivity(i);} 
    } 
} 

現在,完成了!讓我們去你的第一頁(你去你登錄後的頁面),並在onCreate()方法中添加一行

splash.loggedin = true; 

你可能要考慮讓用戶回到此頁面的日誌出來以及。沒有必要,但肯定可以。

您需要做的最後一件事是在用戶使用註銷按鈕註銷時將該變量設置爲false。因此,在按鈕的代碼中,在再次啓動登錄活動的調用之前,只需添加splash.loggedin = false;即可。現在,當按鈕被點擊時,它會將用戶登出,將變量設置爲false,並將它們帶到登錄屏幕。就像我說過的,我測試了這個簡單的佈局和活動之間的真正的基本切換,它對我來說工作得很好。

+0

但是在我的情況下,當我按下登錄活動上的按鈕時,我會進行初始活動,然後我能夠退出應用程序,但是當我再次啓動應用程序時,我沒有看到啓動活動,我從登錄活動開始。因此我想在再次啓動應用程序時看到啓動畫面。請幫助我,如果你能給我另一個建議。 – Jitendra

+0

在最後添加一點,應該有所幫助。 – Rob

+0

我不確定如何使用它。請幫助我,我正面臨着這個問題。 – Jitendra

1

嘗試

intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK); 

您可以通過第二個呼叫刪除FLAG_ACTIVITY_NEW_TASK。

+0

感謝您的回覆,但它不工作。您有另一種解決方案嗎? – Jitendra

+0

適用於我...我使用相同的標誌啓動儀表板活動。 –

+0

這不是我的工作,當我按下按鈕,然後我去註銷活動,但它的priviuos活動。如果您有其他解決方案,請回復我。 – Jitendra

3

請在您的活動D註銷事件中嘗試此操作。

 Button button=(Button)findViewById(R.id.btnLogout); 
     button.setOnClickListener(new View.OnClickListener() {

@Override public void onClick(View arg0) { // TODO Auto-generated method stub Intent intent=new Intent(context,ActivityA.class); intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); context.startActivity(intent); } });</PRE>
+0

我試過了。如果您有其他選擇,請讓我知道。 – Jitendra

1

最後此代碼爲我工作.......

當我按後退按鈕上登錄活動,然後我去Android設備的主屏幕上。

Intent intent= new Intent(Intent.ACTION_MAIN); intent.addCategory(Intent.CATEGORY_HOME); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(intent);