2012-08-29 140 views
7

我正在開發一個android應用程序。如果我按下後退按鈕,應該保存我的應用程序的狀態。我應該如何保存狀態..與所有這些onPause()onResume()onRestoresavedInstance()混淆???我應該使用哪些應用程序來保存應用程序的狀態?例如,當我按退出按鈕,我的整個應用程序應該退出我用完()?保存按下後退按鈕時的狀態

public void onCreate(Bundle savedInstanceState) 
    { 

    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    s1=(Button)findViewById(R.id.sn1); 
    s1.setOnClickListener(this); 
    LoadPreferences(); 
    s1.setEnabled(false); 
    } 

    public void SavePreferences() 
{ 
     SharedPreferences sharedPreferences = getPreferences(MODE_PRIVATE); 
     SharedPreferences.Editor editor = sharedPreferences.edit(); 
     editor.putBoolean("state", s1.isEnabled()); 
     } 
public void LoadPreferences() 
{ 
    System.out.println("LoadPrefe"); 
     SharedPreferences sharedPreferences = getPreferences(MODE_PRIVATE); 
     Boolean state = sharedPreferences.getBoolean("state", false); 
     s1.setEnabled(state); 
     } 
@Override 
public void onBackPressed() 
{ 
    System.out.println("backbutton"); 
    SavePreferences(); 
    super.onBackPressed(); 
} 
+0

如果活動被關閉,使用的onDestroy() – Aviral

+0

你想要什麼樣的應用程序狀態保存?一些文本框或列表值? – VendettaDroid

+0

保存文本框或其他重要UI的值可以通過sharedpreferences來完成。因此,即使應用程序退出或破壞,也可以從sharedpreferences中讀取保存的值。 – VendettaDroid

回答

8

你要做的是什麼,而不是使用邀請碼後退,你必須重寫下面的方法在你的活動,

@Override 
public void onBackPressed() { 

    super.onBackPressed(); 
} 

和保存使用SharedPrefrence您的按鈕的狀態,下一次當你輸入你的活動從Sharedpreference獲得值,並相應地設置你的按鈕的啓用狀態。

例,

private void SavePreferences(){ 
    SharedPreferences sharedPreferences = getPreferences(MODE_PRIVATE); 
    SharedPreferences.Editor editor = sharedPreferences.edit(); 
    editor.putBoolean("state", button.isEnabled()); 
    editor.commit(); // I missed to save the data to preference here,. 
    } 

    private void LoadPreferences(){ 
    SharedPreferences sharedPreferences = getPreferences(MODE_PRIVATE); 
    Boolean state = sharedPreferences.getBoolean("state", false); 
    button.setEnabled(state); 
    } 

    @Override 
public void onBackPressed() { 
    SavePreferences(); 
    super.onBackPressed(); 
} 

onCreate(Bundle savedInstanceState) 
{ 
    //just a rough sketch of where you should load the data 
    LoadPreferences(); 
} 
+0

我瞭解代碼。這是我的應用程序先生,用戶通過谷歌地圖選擇一個目的地。應用程序跟蹤用戶的當前位置,當用戶達到目的地時,警報會被延後。因此,我必須保存狀態我的按鈕,GPS必須在後臺運行,必須保存用戶選擇的鬧鐘鈴聲,必須啓用貪睡按鈕狀態。所以正如你告訴我必須爲我使用的所有按鈕定義SavePreferences和LoadPreferences? – Sindu

+0

是的,你可以使用Shared Preference保存所有的原始數據類型。根據你的要求修改上面的代碼,你應該很好去。獲取按鈕的所有狀態並用不同的鍵值保存。還可以使用字符串鍵維護音調名稱,並在返回時使用它。 –

+0

我可以使用onPause或onResume,以便我的實例保存而不是此SharedPreferences? – Sindu

3

你可以用這種方式

public void onBackPressed() { 
    // Save settings here 
}; 

活動時已檢測到用戶的返回鍵的按下調用。默認實現只是完成當前活動,但您可以覆蓋它以執行任何您想要的操作。

在此方法中保存您的應用程序狀態。