2015-04-27 120 views
0

我有一個Android應用程序,允許用戶動態地將自己的按鈕添加到佈局。我需要做到這一點,一旦應用程序關閉並重新打開,這個動態添加的按鈕將返回到佈局。而不是加載默認佈局。保存整個活動狀態

目前,我在動態通過應用程序的動作條添加按鈕:

if (id == R.id.add_button) 
     { 
     String string = "Adding Button in Progress"; 
     Toast.makeText(getApplicationContext(), string, Toast.LENGTH_SHORT).show(); 

     Button myButton = new Button(this); 
     myButton.setText("Button"); 

     RelativeLayout layout = (RelativeLayout)findViewById(R.id.Layout1); 
     layout.addView(myButton); 

     //myButton.setVisibility(View.VISIBLE); 
     return true;  
     } 

這將創建按鈕正常,但是當應用程序被關閉並重新打開,它啓動時的默認佈局。

我已經做了一些研究,讓應用程序保存並重新加載更新的佈局。看來我需要使用onSaveInstanceState。以下是我迄今爲止在試圖保存佈局方面:

@Override 
    public void onSaveInstanceState(Bundle savedInstanceState) { 
    // Save the app state here: 
    savedInstanceState.putAll(savedInstanceState); 

    super.onSaveInstanceState(savedInstanceState); 
    } 

這裏是我在試圖「重新載入/恢復」方面說佈局。請注意,我沒有使用onRestoreInstanceState,代替我做它通過onCreate方法:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    //setContentView(R.layout.activity_main); 


    // Check whether we're recreating a previously destroyed instance 
    if (savedInstanceState != null) { 
     // Restore value of members from saved state 
     //savedInstanceState.get(savedInstanceState); 
     } 

    else 
     { 
     //initialize members with default values for a new instance 
     setContentView(R.layout.activity_main); 
     } 
    } 

我不知道如果我保存/加載正確的,但我怎麼能完成這一任務的任何建議將不勝感激。

謝謝你的時間!

P.S.我仍然是一個相當新的成員,所以我不能在現有的線程上發表評論/提出問題。

我知道有很多關於嘗試加載/保存佈局的信息,但在我的情況下,我需要它來保存按鈕,而不是一串用戶文本。換句話說,它不是我需要保存的固定值。如果用戶添加了n個按鈕,當應用退出並重新啓動時,它應該具有相同的3個按鈕。

+0

ViewStub和SharedPreferences的組合將解決您的問題。 – VVB

+0

@VVB: \t 感謝您的回覆。我之前嘗試過查看SharedPreferences,但由於我不確定如何將活動狀態(即最近添加的按鈕)表示爲SharedPreferences似乎需要的鍵值對,而被拒絕。 – organizedchaos

回答

0

保存的實例狀態是關於您的活動的鍵值對。這些文檔清楚地表明它在應用程序關閉時會被銷燬(按下後退按鈕或系統本身關閉應用程序)。這僅在您在應用程序內導航或更改方向時有用。

一種解決方案是創建一個共享首選項,讓您的應用程序需要識別由動態內容組成的給定結構。每當您根據它打開應用程序和代碼時獲取這些值。

其他解決方案是使用數據庫或文件來存儲有關您的動態內容的數據。

+0

我似乎無法理解共享首選方法的一件事是如何將新添加的Button表示爲鍵值對。 – organizedchaos

+0

就像你可以使用的方法一樣,比如putBoolean和putInt,它們使用key-val對存儲值。但據我所知,沒有辦法將Button表示爲String,Boolean,Integer等? – organizedchaos

+0

不要將整個按鈕存儲爲共享的preference.save屬性或屬性,然後使用給定的數據呈現按鈕。 –