2011-05-15 40 views

回答

4

如果您將活動的launchMode設置爲singleTask,那麼(除非應用程序被終止/ gc被調用),您的數據(列表)將被保留。

這樣,您的設備一次只能保存一個應用程序的運行實例,所以當您「再次啓動」時,無論從哪裏運行,如果它已經在後臺運行,那麼該實例將顯示最新數據)。

如果您的應用程序已完成並且仍需要顯示最新的數據列表,則此解決方案將無法工作。
但是,您可以試試SharedPreferences:將當前數據保存到應用程序的SharedPreferences,並在啓動時從該處恢復。

如果沒關係,要在應用程序的每個乾淨啓動時都有預定義的新列表,但是當它進入前臺時,需要列表中最後一次出現的項目,則應使用onCreate方法的savedInstanceState參數:

private static final String MYLISTKEY = "myListLabels"; 
private ArrayList<String> listLabels = new ArrayList<String>(); 

@Override 
protected void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    if (savedInstanceState.containsKey(MYLISTKEY)) 
    { 
     listLabels = savedInstanceState.getStringArrayList(MYLISTKEY); 
    } 
    else 
    { 
     // TODO: populate explicitely your list 
    } 
} 

@Override 
protected void onSaveInstanceState(Bundle outState) 
{ 
    super.onSaveInstanceState(outState); 
    outState.putStringArrayList(MYLISTKEY, listLabels); 
} 

其中listLabels包含您的列表的標籤。
它們不需要爲String類型,您可以在Bundle中放置任何類型。

+0

當他們擊中後退按鈕時,它似乎被銷燬... onCreate被再次調用。我已經嘗試過這種改變,但沒有奏效。這聽起來是對的嗎? – corbin 2011-05-15 19:30:14

+0

這可能是因爲您在'onCreate'方法中明確填充了您的列表。請參閱我的更新,以在您的活動的「onCreate」中使用'savedInstanceState'。 – rekaszeru 2011-05-15 19:57:55

+0

當用戶點擊後退按鈕時,onSaveInstanceState似乎不會被調用。它似乎只在活動暫停時才被調用,而不是被殺死。所以,我認爲我已經使用了更持久的東西。原因是,用戶投訴是他們點擊後退按鈕,然後他們後來重新啓動應用程序,並且列表視圖不再有其內容。 – corbin 2011-05-18 05:22:33

0

當用戶點擊後退按鈕時,活動總是被銷燬,因此將不會從已保存的實例進行恢復。

Android Training

因爲當用戶按下後退或活動完成本身的活性被破壞,因爲行爲表明活動不再需要的活動實例的系統的概念已經一去不復返了。