4

アプリで「SharedPreferences」を使用して、複数の編集テキストボックスから文字列値を保存/取得する機能を保持していますが、それはうまく機能しています。アクティビティには、使用可能な値の文字列配列を持つスピナーもあります。しかし、スピナーの選択を SharedPreferences に書き込み、後で SharedPreferences を読み取ってその値を撤回して設定する方法については不明です。

edittextの構成は次のとおりです。

-SharedPreferences への保存値を有効にするボタン-

public void buttonSaveSendClick(View view) {

    SharedPreferences.Editor editor = getPreferences(0).edit();

    EditText editTextCallId = (EditText) findViewById(R.id.editTextCallId);
    editor.putString("editTextCallIdtext", editTextCallId.getText().toString());
    editor.putInt("selection-startCallId", editTextCallId.getSelectionStart());
    editor.putInt("selection-endCallId", editTextCallId.getSelectionEnd());
    editor.commit();
}

-SharedPreferences から最後に保存された値を復元を有効にするボタン-

public void buttonRestoreLastClick(View view) {

    SharedPreferences prefs = getPreferences(0); 

    EditText editTextCallId = (EditText) findViewById(R.id.editTextCallId);
    String editTextCallIdtextrestored = prefs.getString("editTextCallIdtext", null);
    editTextCallId.setText(editTextCallIdtextrestored, EditText.BufferType.EDITABLE);
    int selectionStartCallId = prefs.getInt("selection-startCallId", -1);
    int selectionEndCallId = prefs.getInt("selection-endCallId", -1);
    editTextCallId.setSelection(selectionStartCallId, selectionEndCallId);
}

最初のボタン (保存) でスピナーの選択された値のコレクションを構築する方法に関する提案はありますか? 次に、「復元」ボタンを押すと、その保存された値をスピナービューに戻す方法は?

4

1 に答える 1

7

すべてのステートメントeditor.apply();の後に一度電話する必要があります。editor.put();そうしないと、設定に加えたすべての変更が破棄されます。配列内のアイテムの位置がまったく変化しないと仮定すると、選択した位置を int として設定に保存できます。

保存する:

int selectedPosition = yourSpinner.getSelectedItemPosition();
editor.putInt("spinnerSelection", selectedPosition);
editor.apply();

ロードする:

yourSpinner.setSelection(prefs.getInt("spinnerSelection",0));

配列内の項目が変更される場合は、位置ではなく実際の文字列を保存する必要があります。次のようなものが機能します。

String selectedString = yourArray[yourSpinner.getSelectedItemPosition()];
editor.putString("spinnerSelection", selectedString);
editor.apply();

配列をループし、配列[i]をprefsに保存されている値と照合して、文字列の位置を見つけます。次に、 を呼び出しますyourSpinner.setSelected(position)。代わりに ArrayList を使用する場合、この部分はループなしで呼び出すことができます

ArrayList.indexOf(prefs.getString("spinnerSelection", ""));

ArrayList だけがindexOf();メソッドを持つことに注意してください。プレーンな配列では、メソッドを使用できませんindexOf();。正しい値を見つけるには、配列を手動で検索する必要があります。

于 2011-02-21T16:02:06.270 に答える