0

いくつかの入力コントロール要素を持つダイアログ フラグメント A があります。ユーザーが一部のフィールドに無効な値を入力すると、検証エラー メッセージが表示されたダイアログ ボックス B が表示されます。

問題は、ダイアログ B を閉じると、ダイアログ A が表示されないことです。これはユーザーフレンドリーではありません。ダイアログ ボックスに 10 個の値があり、ユーザーがそのうちの 9 個に正しい値を入力した場合、検証エラーが発生した場合、9 個の正しい値を再度入力する必要があります。

A と B の両方が を使用して実装されてAlertDialogいます。

ユーザーがダイアログ A に戻り、間違った値を修正してもう一度 [OK] ボタンを押すことができるように、検証エラー メッセージの表示を実装するにはどうすればよいですか?

4

1 に答える 1

1

これはお粗末ですが、私はそれをうまく機能させることができました。OnClickListenerこれを行う方法、アラート ダイアログに検証エラーを表示する (およびダイアログが閉じられないようにする) 方法は、ダイアログ ボタンの をオーバーライドすることです。あなたは「私はすでにそれをやっている... ありがとうジャーク」と思っているかもしれませんが、それがトリックです. あなたはおそらく電話AlertDialog.Builder().setTitle().setView().setPositiveButton(title, new OnClickListener() {...validation logic...}).create();してからそれを返しています。ダイアログが閉じられないようにしたい場合は、OnShowListener(作成後に)ダイアログに を追加し、ボタン click thereをオーバーライドする必要があります。次に例を示します。

うまくいかない方法:

    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
    builder.setTitle("Dialog example").setPositiveButton(android.R.string.ok, new Dialog.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            // do some validation logic
            if (!valid) {
                myEditText.setError(R.string.invalid_value); //
            } else {
                dialog.dismiss();
            }
        }
    });

    Dialog dialog = builder.create();
    // show the dialog, or return it, whatever you're going to do with it

onClickListenerしたがって、デフォルトのダイアログが閉じる前に your が呼び出されるため、上記は機能しません。これを回避する1つの方法は次のとおりです。

    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
    builder.setTitle("Dialog example").setPositiveButton(android.R.string.ok, null);

    Dialog dialog = builder.create();
dialog.setOnShowListener(new OnShowListener() {

    @Override
    public void onShow(DialogInterface dialog) {
        ((AlertDialog)dialog).getButton(DialogInterface.BUTTON_POSITIVE).setOnClickListener(new OnClickListener() {
        public void onClick(View v) {
            // do some validation logic
            if (!valid) {
                myEditText.setError(R.string.invalid_value); //
            } else {
                dialog.dismiss();
            }
        }
    }
});

覚えておいてください、あなたはそれを却下する責任があります!

于 2013-09-05T13:23:34.880 に答える