2014-01-20 27 views
0

我的應用程序以活動A(登錄屏幕)開始,我總是希望它在活動堆棧的底部。有沒有一種方法可以檢測哪些活動將在點擊後退按鈕後恢復?

基於登錄後的一些邏輯,我啓動了一些其他Activity B-Z。應用程序中有一個菜單,可讓您在任何活動B-Z之間切換。

如果用戶點擊後退按鈕足夠多次,我不希望它們返回到登錄屏幕。如果在活動A上按下後退按鈕作爲堆棧上的下一個活動,我希望將用戶發送到Android主屏幕。本活動不保證是由活動A啓動的活動,因爲我的活動使用單個活頁。

想法?

我能想到的唯一的其他選擇是刪除singleTop,並且Activity A啓動的任何Activity都會記住(我的Activities都是從基類派生的,我將用它來做)。

另一種可能性可能會做這樣的事情在onBackPressed處理程序如下:

if (getParent().getClass().getName().equals(ActivityA.class.getName())) {}

回答

1

雖然沒有直接回答你的問題,但如果問題是

我不希望他們回到登錄屏幕

那麼經典的解決方案是finish()當用戶登錄成功時登錄Activity。這樣你就可以確保用戶永遠不會回到那個Activity

+0

我與這個問題是我*希望* ActivityA在堆棧上。如果我的應用程序中的web服務返回說用戶不再登錄,我會啓動帶有FLAG_ACTIVITY_CLEAR_TOP標誌的ActivityA。由於ActivityA位於堆棧的底部,因此它將銷燬頂部的所有活動並將用戶返回到ActivityA(登錄屏幕)。如果沒有ActivityA已經在堆棧的底部,我不知道我是否可以完成同樣的事情,對嗎? – Andrew

+1

@Andrew:即使活動不在堆棧AFAIK上,也可以使用FLAG_ACTIVITY_CLEAR_TOP,如果你也使用FLAG_ACTIVITY_SINGLE_TOP(或者在你的情況下,在每個地方都使用'singleTop',這很奇怪)。 – CommonsWare

+0

以下是可幫助您解決問題的討論鏈接:http://stackoverflow.com/questions/3007998/on-logout-clear-activity-history-stack-preventing-back-button-from-opening-l ?RQ = 1。正如你將會看到的那樣,存在一個乾淨的解決方案,不幸的是它僅適用於API v11 +,以及一些在任何Android上運行良好的聰明黑客。 – Egor

0

爲此,您爲什麼不能獲取用戶登錄信息,並將其存儲在您的應用程序私人共享首選項中。然後,當用戶啓動您的應用程序時,您可以閱讀活動A中的共享首選項,並自動將其登錄到活動b中。

是這樣的:

SharedPreferences myPrefs = getBaseContext().getSharedPreferences("MyPrefs", SharedPreferences.MODE_PRIVATE); 

if((myPrefs.getString("username",null) != null) && (myPrefs.getString("password",null) !=null)){ 

    // Make sure your user is a member of your application 

    // auto log in to the home page 
    Intent bIntent = new Intent(getBaseContext(), BIntent.class); 
    startActivity(bIntent); 

} 

更多參考有關如何,如果你想成爲真正的浮油使用共享偏好

http://developer.android.com/reference/android/content/SharedPreferences.html

然後,存儲類的名字時的onDestroy( )方法在每個Activity中調用,覆蓋每個類作爲上次打開的Activity。因此,無論用戶在關閉應用程序之前的最後一次活動都存儲在首選項中,並且您可以在登錄活動中讀取該活動,然後從此處啓動bz

這將使登錄活動始終處於內存中,因爲它是首次啓動來檢查您的用戶憑據。

+0

是的,但仍然存在問題。假設登錄活動打開Activity2。現在,在Activity2上,用戶點擊後退按鈕。如果我在登錄後知道Activity,Activity始終是Activity2,可以在'onBackPressed'中調用'moveTaskToBack(true)',應用程序將最小化。但我不知道在登錄活動之後哪個Activity是活動。它可以是任何活動。這就是爲什麼我需要知道如何確定這一點。 – Andrew

+0

在我的描述結尾,我提到跟蹤'SharedPreferences'中的當前視圖。如果你這樣做,你可以查詢前綴爲你的唯一標識符活動並啓動它。將sharedPrefs調用添加到每個活動是一件小事,但我認爲這可能是一個有效的選擇。 –

相關問題