3

Androidでタスクリストを作成しようとしていますが、アプリケーションを閉じてもリストの内容を記憶しておく必要があります。私は次のようにこれを行おうとしていonSaveInstanceStateます:

public class Main extends Activity implements OnClickListener, OnKeyListener {
    ...
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        ...
        if (savedInstanceState != null) {
            ToDo = savedInstanceState.getStringArrayList("MyArrayList");
            AA.notifyDataSetChanged();
        } else {
            ToDo = new ArrayList<String>(); // Initiate ToDo
        }
    }

    @Override
    public void onSaveInstanceState(Bundle savedInstanceState) {
        super.onSaveInstanceState(savedInstanceState);
        savedInstanceState.putStringArrayList("MyArrayList", ToDo);
    }
    // ...To-Do implementation follows
}

しかし、これは機能しないので、私はそれについて読み始めました、onSaveInstanceStateそして私がそれを正しく理解しているなら、あなたは実際にそれとのセッション間でデータを保存することはできません。では、どうすればそれを行うことができますか?

4

3 に答える 3

7

データを永続化するためのオプションについては、データストレージに関するAndroidのドキュメントを確認してください。共有設定、SQLiteデータベース、プライベート内部ディレクトリ内のファイル、またはSDカード上のファイル(使用可能な場合)を使用できます。

基本的に、onSaveInstanceStateAndroidがメモリを再利用するためにアクティビティを強制終了するシナリオに使用されます。そのシナリオでは、ユーザーがアクティビティに戻った場合に備えて、OSはアクティビティのプレゼンスの記録を保持し、その後、BundlefromonSaveInstanceStateonCreateメソッドに渡します。汎用ストレージに使用するためのものではありません。

于 2012-05-30T20:57:12.113 に答える
0

ToDoをDBに入れ、'onPause()'でDBにデータを保存します。アクティビティがデータなどを失ったときの説明については、アクティビティのライフサイクルを確認することをお勧めします。

また、このスレッドはonSaveInstanceStateに関して興味深い可能性があります。

于 2012-05-30T21:01:47.113 に答える
0

onSaveInstanceState()は、アクティビティが破棄および再作成されるたびに呼び出されます。たとえば、向きの変更中や、デバイスが低メモリで実行されている場合などです。状態変数を保存し、アクティビティが強制終了されて再作成された場合に適切なアクションを実行するために使用します。

必要なのはSharedPreferencesで、アプリケーションを閉じて再度開いた場合でもデータを保持します。これを見てください :

    //Initialize the list
    Set<String> valueSet = new HashSet<>();
    valueSet.add("A");
    valueSet.add("B");

    //Saving data in sharedPreferences
    SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context);
    SharedPreferences.Editor editor =  sharedPreferences.edit();
    editor.putStringSet("key_name", valueSet);
    editor.commit();

    //Retrieving saved data from sharedPreferences (even in later sessions)
    valueSet = sharedPreferences.getStringSet("key_name", null);
于 2016-06-14T20:54:42.123 に答える