Android

Android - DialogFragmentでsetSingleChoiceItemsを使ってリスト選択

HTMLにおけるSelectタグのような実装をAndroidでするには、DialogFragmentでsetSingleChoiceItemsを使うのが便利です。

完成系はこちら

クイズアプリで使用する問題セットを選択する機能を実装してみました。

「クイズの問題セットを選択」ボタンをクリックすると、アラードダイアログが立ち上がります。リストの中から選択できるようになっていて、「送信」ボタンが押されると保存ロジックに移ります。選択された問題セットを内部ストレージに保存し、もともとの設定画面にその数字を反映させる実装になっています。

実装コードはこちら

public class SelectQuizDialogFragment extends DialogFragment {
    private int mSelectedItem = 0;
    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        final CharSequence[] items = {"1", "2", "3", "4"};

        AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
        builder.setTitle("クイズで使用するセットを選択してください。");
        builder.setSingleChoiceItems(items, mSelectedItem, new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int item) {
                mSelectedItem = item;
            }
        });
        builder.setPositiveButton("送信", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int id) {
                // 選択された問題セットを保存してもともとの設定画面に数字を反映させる
                SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(getActivity());
                String quizSet = (String)items[mSelectedItem];
                sp.edit().putString("quizSet", quizSet).commit();
                TextView tvQuizSet = (TextView)getActivity().findViewById(R.id.textViewQuizSet);
                tvQuizSet.setText(quizSet);
                dialog.dismiss();
            }
        });
        builder.setNegativeButton("キャンセル", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int id) {
                dialog.dismiss();
            }
        });
        Dialog dialog = builder.create();
        return dialog;
    }
}

-Android