2012-08-29 10 views
7

私はアンドロイドアプリを開発中です。私が戻るボタンを押すと、私のアプリケーションの状態を保存する必要があります。状態を保存するために何を使うべきですか?これらのすべてと混同されます。onPause()onResume()、またはonRestoresavedInstance() ???これらのうち、私は自分のアプリケーションの状態を保存するために使うべきですか?例えば、私が終了ボタンを押すと、私のアプリ全体が終了するはずですが、私はfinish()を使用しましたか?戻るボタンを押したときの状態を保存します

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

私はコードを理解しました。これは、ユーザーがGoogleマップを使用して目的地を選択するアプリケーションです。アプリケーションがユーザーの現在地を追跡し、ユーザーが目的地に到達するとアラームがスヌーズされます。私のボタンの、GPSはバックグラウンドで実行する必要があります、ユーザーが選択したアラーム音を保存する必要があります、スヌーズボタンの状態を有効にする必要があります。だからあなたが私が使用するすべてのボタンのSavePreferencesとLoadPreferencesを定義しなければならないと言ったのですか? – Sindu

+0

はい共有嗜好を使用してすべてのプリミティブデータ型を保存できます。要件に応じて上記のコードを変更してください。ボタンのすべての状態を取得し、異なるキー値で保存します。また、文字列キーを使用してトーン名を維持し、戻ったときに使用します。 –

+0

私はこのSharedPreferencesの代わりにインスタンスが保存されるようにonPauseまたはonResumeを使用できますか? – Sindu

3

あなたはこのよう活動はバックキーのユーザーの押しを検出したときに呼び出され

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

を使用することができます。デフォルトの実装は現在のアクティビティーを終了するだけですが、これをオーバーライドして必要な処理を実行できます。

このメソッドでは、アプリケーションの状態を保存します。あなたがしなければならないことである

関連する問題