1

editTextとSpinnerだけで構成される最初のAndroidアプリを作成しています。アクティビティサイクルを読んで、私の状況でバンドルメカニズムを使用する必要があるかどうか疑問に思っています。

ウィジェットの状態は自動的に保持されるため、スピナーでgetSelectedItem()メソッドを呼び出し、アクティビティのonCreate()メソッド内のEditTextでgetText()を呼び出して、新しく再作成したモデルオブジェクトに渡すことができますか?バンドルメカニズムを使用するのではなく?このアプローチの長所と短所は何ですか?

4

1 に答える 1

1

自動的に永続化されなかったウィジェットの状態。アクティビティが破棄されると、状態に関するすべての情報が失われます。共有設定を使用してアプリケーションの状態を保存することをお勧めします。これはグーグル開発者サイトからの例です。キーと値のペアを保存することでアプリケーションの状態を保存でき、アプリには十分なはずです。

アクティビティが停止したときに、テキストとスピナーアイテムの位置を共有設定に保存しonStop()、の状態を復元しonCreate()ます。

public class Calc extends Activity {
    public static final String PREFS_NAME = "MyPrefsFile";

    @Override
    protected void onCreate(Bundle state){
       super.onCreate(state);
       . . .

       // Restore preferences
       SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
       boolean silent = settings.getBoolean("silentMode", false);
       setSilent(silent);
    }

    @Override
    protected void onStop(){
       super.onStop();

      // We need an Editor object to make preference changes.
      // All objects are from android.context.Context
      SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
      SharedPreferences.Editor editor = settings.edit();
      editor.putBoolean("silentMode", mSilentMode);

      // Commit the edits!
      editor.commit();
    }
}

アプリケーションの状態をメソッドごとに保存することもできますがonSaveInstanceState(Bundle)、通常は、onPause()またはonStop()メソッドで保存するのがより良い方法です(データは確実に保存されます)。ドキュメントによると:

永続データはonSaveInstanceState(Bundle)ではなくonPause()に保存することが重要です。後者はライフサイクルコールバックの一部ではないため、ドキュメントで説明されているように、すべての状況で呼び出されるわけではありません。

于 2013-01-12T23:54:14.813 に答える