0

を作成していAlertDialogます。これが私が使用しているコードのスニペットです:

final CharSequence[] items = {"Red", "Green", "Blue"};

AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("Pick a color");
builder.setSingleChoiceItems(items, -1, new DialogInterface.OnClickListener() {
    public void onClick(DialogInterface dialog, int item) {
        Toast.makeText(getApplicationContext(), items[item], Toast.LENGTH_SHORT).show();
    }
});
AlertDialog alert = builder.create();
alert.show();

これは正常に機能しますが、選択オプションをどこかに保存して、次にアラートダイアログを開いたときに、以前に選択したオプションが表示されるようにする方法を理解できませんでした。アプリケーションがバックグラウンドにあり、完全に破棄されていない限り、アプリケーションを再起動してもこの値を維持する必要はありません。

Android開発に慣れていないので、これを実現するのはかなり難しいと思いました。

4

1 に答える 1

3

以下のコードを使用してください:

private static final String SELECTED_ITEM = "SelectedItem";
private SharedPreferences sharedPreference;
private Editor sharedPrefEditor;

private void showAlert() {
    final CharSequence[] items = {"Red", "Green", "Blue"};

    AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setTitle("Pick a color");               
    builder.setSingleChoiceItems(items, getSelectedItem(), new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int item) {
            saveSelectedItem(item);
            Toast.makeText(getApplicationContext(), items[item], Toast.LENGTH_SHORT).show();
        }       
    });
    AlertDialog alert = builder.create();
    alert.show();

}

private int getSelectedItem() {
    if (sharedPreference == null) {
        sharedPreference = PreferenceManager
                .getDefaultSharedPreferences(this);
    }
    return sharedPreference.getInt(SELECTED_ITEM, -1);
}

private void saveSelectedItem(int item) {
    if (sharedPreference == null) {
        sharedPreference = PreferenceManager
                .getDefaultSharedPreferences(this);
    }
    sharedPrefEditor = sharedPreference.edit();
    sharedPrefEditor.putInt(SELECTED_ITEM, item);
    sharedPrefEditor.commit();
}

初めて、何も選択されません。2回目以降は、以前に選択されたアイテムがデフォルトで選択されます。

于 2012-08-27T06:47:06.327 に答える