2013-05-22 118 views
1

我有一個使用選項卡組活動的應用程序。所有工作都很好,這些標籤可以自己打開每個活動,但是當用戶註銷時,我的麻煩即將到來。我有一個確認用戶想要註銷的對話框,當他們單擊YES時,它會向會話服務器端的URL發送一個http請求,清除storepreferences中的一些變量,然後啓動登錄活動。這一切都很好,但是當用戶在登錄界面時,如果他們回來了,他們就會將他們帶回到他們登錄前的活動中。我試着添加諸如FLAG_ACTIVITY_CLEAR_TOP,FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS,FLAG_ACTIVITY_NO_HISTORY之類的標誌,它們都不起作用,它們仍然可以回擊並且執行之前的活動。所以我已經重寫了登錄屏幕上的onBackPressed方法,而不是將應用程序發送到後臺(moveTaskToBack(true))。這似乎工作,當我回到主屏幕,但如果我點擊我的應用程序的圖標,它不恢復在我預期的登錄屏幕,但在用戶註銷之前的活動。任何關於我可以嘗試如何在用戶註銷時這樣做的想法,它會清除以前的所有活動,並向我們顯示登錄活動而無法返回?預先感謝您的任何幫助!!!TabGroupActivity android應用程序 - 註銷後防止返回

回答

1

如果你的最低目標是蜂窩或更高,這是非常容易的。如果你的最低限度更低,它會稍微複雜一些。使用蜂窩,你可以添加幾個標誌的意圖,它工作正常。在較低的API級別中,我發現的唯一可行的方法是啓動Intent.FLAG_ACTIVITY_CLEAR_TOP的活動,並讓該活動啓動您的登錄活動,然後完成。

@TargetApi(Build.VERSION_CODES.HONEYCOMB) 
private void logout() { 

    Intent intent; 
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { 

     intent = new Intent(this, LoginActivity.class); 
     intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK); 
     startActivity(intent); 
     finish(); 
    } 
    else { 

     intent = new Intent(this, HomeActivity.class); 
     intent.putExtra("logout", true); 
     intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
     startActivity(intent); 
     finish(); 
    } 
} 

HomeActivity

@Override 
protected void onCreate(Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState); 
    boolean logout = getIntent().getBooleanExtra("logout", false); 
    if (logout) { 
     startActivity(new Intent(this, LoginActivity.class)); 
     finish(); 
     return; 
    } 
    //... 
} 
+0

這似乎工作到目前爲止,雖然有時應用程序完全關閉,而不是返回到登錄屏幕。標記爲現在被接受,直到我找到更好的解決方案。謝謝詹姆斯的幫助! – Phil

+0

我不明白這是如何完全關閉應用程序的。在所有場景中,您都將開始一個新的「LoginActivity」。 –

+0

詹姆斯,你的答案肯定是正確的。包含我的tabhost的主類在onDestory()方法中有額外的代碼,它正在殺死該應用程序。刪除,它是完美的工作。感謝您的幫助!!! – Phil

0

嘗試覆蓋回壓法,一件讓他走了出來,當點擊後退按鈕:

@Override 
public void onBackPressed() { 
    Intent intent = new Intent(Intent.ACTION_MAIN); 
    intent.addCategory(Intent.CATEGORY_HOME); 
    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
    startActivity(intent); 
} 

,或者你可以註銷後重定向到一個視圖與選項nohistory視圖,這可以通過添加此行的AndroidManifest其中新活動註銷時進行定義

android:noHistory="true" 
+0

嘗試這兩個選項,不幸的是它仍然在做同樣的事情。當我按回登錄屏幕時,它會按預期進入主屏幕,但當我點擊我的應用程序圖標重新啓動時,它會在用戶註銷之前恢復。 – Phil

+0

你確實添加了noHistory到你的LoginActivity? –

+0

是的,但它仍然在上一次活動中恢復。如果您有任何其他想法,我可以嘗試。感謝您的幫助!! – Phil

相關問題