2016-12-12 2 views
0

По какой-то причине setError для EditText в диалоговом окне установлен, но поле не подсвечено. Диалог загружается как отдельный вид.Поле подсветки Android в диалоговом окне

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> 

И здесь идет invokation диалогового. Слушатель 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(); 
} 

Поблагодарили бы за любую помощь.

ответ