如何在警报对话框中处理无效输入?

时间:2014-05-16 00:54:48

标签: android android-fragments dialog alertdialog android-alertdialog

我有一个Dialog Fragment,允许用户指定一些文本和文本的位置。

dialog fragment

我想限制用户输入大于字符上限的文字。 我可以限制最大字符输入吗?否则,我可以在此代码中包含检查以确保文本小于LIMIT? 这是代码:

public Dialog onCreateDialog(Bundle savedInstanceState) {
    // Use the Builder class for convenient dialog construction
    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
    final CharSequence[] items = {"Above", "Below"};
    capPos = Position.ABOVE;

    final EditText input = new EditText(getActivity());
    input.setInputType(EditorInfo.TYPE_CLASS_TEXT);
    input.setHint("Add caption here");
    builder.setView(input);

    builder.setTitle(R.string.dialog_caption)
           .setPositiveButton(R.string.proceed, new DialogInterface.OnClickListener() {
               public void onClick(DialogInterface dialog, int id) {
                text = input.getText().toString();
                mListener.onDialogPositiveClick(CaptionFragment.this);
               }
           })
           .setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {
               public void onClick(DialogInterface dialog, int id) {
                   mListener.onDialogNegativeClick(CaptionFragment.this);
               }
           })
            .setSingleChoiceItems(items, 0, new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int id){
                    if ("Above".compareTo(items[id].toString()) == 0){
                        capPos = Caption.Position.ABOVE ;
                        Log.i("CaptionFragment", "Above");
                    }else if ("Below".compareTo(items[id].toString()) == 0){
                        capPos = Caption.Position.BELOW;
                        Log.i("CaptionFragment", "Below");
                    }
                }
            });
    // Create the AlertDialog object and return it
    return builder.create();
} 

2 个答案:

答案 0 :(得分:2)

所以它是EditText。您可以使用attiribute android:maxLength来限制此处显示的字符数https://stackoverflow.com/a/3285421/655987

另一种选择是让用户输入他/她想要的任何内容,然后进行检查背景。

您可以在OnClickListener内执行此操作。如果您只想在用户点击肯定按钮时检查该值(通常是这种情况),那么您应该按如下方式进行检查:

...
.setPositiveButton(R.string.proceed, new DialogInterface.OnClickListener() {
           public void onClick(DialogInterface dialog, int id) {
            text = input.getText().toString();
            if(text.equals("ads"))  //For example
                ...
           }
       })
...

此外,您最初可以将肯定按钮的onClickListener设置为 null 然后覆盖它,如下所示https://stackoverflow.com/a/7636468/655987

由你决定。

答案 1 :(得分:1)

试试这个,

final EditText input = new EditText(getActivity());
    input.setInputType(EditorInfo.TYPE_CLASS_TEXT);
input.setFilters(new InputFilter[] {
            new InputFilter.LengthFilter(LIMIT) });
    input.setHint("Add caption here");
    builder.setView(input);