これはお粗末ですが、私はそれをうまく機能させることができました。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();
}
}
}
});
覚えておいてください、あなたはそれを却下する責任があります!