10

ListViewディスプレイをモデル化するカスタムでダイアログを作成しましたがSpinner、もともとは「性別の選択」という値で始まります。

ダイアログが開くと、選択を求めるプロンプトが表示されます (スピナーのように)。選択が再度選択されると、同じオプションが表示されますが、どのオプションが既に選択されているかは示されません。

例:
デフォルト値: "性別の選択"
ダイアログが開き、何も選択されていません
ユーザーが選択: "男性"
ユーザーがダイアログを再度開く...
ダイアログが開き、選択がありません

「男性」を選択してもらいたいです。これが最後の選択だったからです

これまでの私のコードは次のとおりです。

genderItems = getResources().getStringArray(R.array.gender_array);
genderAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_dropdown_item, genderItems);

genderDrop.setOnTouchListener(new View.OnTouchListener() {
        public boolean onTouch(View v, MotionEvent event) {
            if(event.getAction() == MotionEvent.ACTION_DOWN) {
                Builder genderBuilder = new AlertDialog.Builder(Register.this)
                    .setTitle(R.string.gender_prompt)
                    .setAdapter(genderAdapter, new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int which) {
                        inputGender.setText(genderItems[which]);
                        dialog.dismiss();
                    }
                });
                AlertDialog genderAlert = genderBuilder.create();
                genderAlert.show();
                genderAlert.getListView().setSelection(0);
            }
            return false;
        }
});

genderAlert.getListView().setSelection(0) 「男性」として選択されたデフォルトを設定しません「女性」として
genderAlert.getListView().setSelection(1) 選択されたデフォルトを設定しません

4

1 に答える 1

22

理解した:

デフォルト選択の引数を持つから.setAdapterに切り替えました。.setSingleChoiceItemsあとは、オプションをクリックするたびに設定されるグローバル変数を作成するだけでした。グローバル変数は最初は -1 に設定されているため、オプションは選択されていません。何かをクリックすると、その位置に設定され、次にダイアログが作成されたときに、以前の選択が反映されます。下記参照:

Integer selection = -1;

genderItems = getResources().getStringArray(R.array.gender_array);
genderAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_dropdown_item, genderItems);

genderDrop.setOnTouchListener(new View.OnTouchListener() {
        public boolean onTouch(View v, MotionEvent event) {
            if(event.getAction() == MotionEvent.ACTION_DOWN) {
                Builder genderBuilder = new AlertDialog.Builder(Register.this)
                    .setTitle(R.string.gender_prompt)
                    .setSingleChoiceItems(genderAdapter, selection, new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog, int which) {
                            inputGender.setText(genderItems[which]);
                            selection = which;
                            dialog.cancel();
                        }
                    });
                AlertDialog genderAlert = genderBuilder.create();
                genderAlert.show();
            }
            return false;
        }
});
于 2012-08-30T02:58:08.783 に答える