Dialog中的Android突出显示错误字段

时间:2016-12-12 09:04:02

标签: android error-handling dialog

由于某种原因,设置了对话框中 EditText的 ,但该字段未突出显示。对话框作为单独的视图加载。

XML:

 <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent" android:layout_height="match_parent">

    <TextView
        android:paddingLeft="16dp"
        android:id="@+id/pwdtext"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/pwd_text"
        android:textSize="16dp"
        android:layout_centerHorizontal="true"/>
    <EditText
        android:paddingLeft="16dp"
        android:id="@+id/login"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@id/pwdtext"
        android:hint="@string/login">
        <requestFocus/>
    </EditText>
    <EditText
        android:paddingLeft="16dp"
        android:id="@+id/pwd"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@id/login"
        android:hint="@string/pwd"/>
</RelativeLayout>

这里有调用对话框。 Onclick听众运作良好。通过调试器, double-checked and getError() 两个字段都返回正确的值,但没有突出显示任何字段。对话框也已关闭,但我想这不应该是字段有错误:

private void showAlert(){
    LayoutInflater inflater = LayoutInflater.from(context);
    final View promptView = inflater.inflate(R.layout.auth_prompt,null);
    AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(context);
    dialogBuilder.setView(promptView);
    dialogBuilder.setCancelable(true);
    dialogBuilder.setPositiveButton("OK" , new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialogInterface, int i) {
            EditText login = (EditText) ((AlertDialog) dialogInterface).findViewById(R.id.login);
            EditText pwd = (EditText) ((AlertDialog) dialogInterface).findViewById(R.id.pwd);
            //For simultaneous validation
            List<EditText> fields = new ArrayList<>();
            fields.add(login);
            fields.add(pwd);
            for(EditText field: fields){
                //Avoiding double checks on null+""
                String text = null;
                try{
                     text = field.getText().toString().trim();
                }catch (RuntimeException e){
                    text="";
                }
                if("".equals(text)){
                    field.setError("Please fill in the field");
                    ((AlertDialog) dialogInterface).show();
                }
            }
        }
     });
    dialogBuilder.setNegativeButton("Cancel", new DialogInterface.OnClickListener(){

        @Override
        public void onClick(DialogInterface dialogInterface, int i) {
            LOG.info("CANCEL Clicked");
            dialogInterface.cancel();
        }
    });
    AlertDialog dialog = dialogBuilder.create();
    dialog.show();
}

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

在对话之前创建监听器。这里完整描述: How to prevent a dialog from closing when a button is clicked