2016-10-26 5 views
2

Я пытаюсь добавить пустые полевые проверки на EditText на AlertDialog. Но даже после того, как поле пусто, сообщение об ошибке не отображается, вместо этого AlertDialog закрывается. Но если условия работают хорошо, так как я не могу выполнять почтовые операции, если какое-либо поле пусто.Проверка на EditText в alertDialog

Вот мой Java Пример кода:

public class TourActivity extends AppCompatActivity { 

private LayoutInflater inflater; 
private FloatingActionButton fab; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_tour); 
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 
    fab = (FloatingActionButton) findViewById(R.id.fab); 

    fab.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      inflater = TourActivity.this.getLayoutInflater(); 
      View content = inflater.inflate(R.layout.activity_add_new_trip, null); 
      final EditText editEvent = (EditText) content.findViewById(R.id.edTxt_EventName); 
      final EditText editStartDate = (EditText) content.findViewById(R.id.edTxt_EventSDate); 


      AlertDialog.Builder builder = new AlertDialog.Builder(TourActivity.this); 
      builder.setView(content) 
        .setTitle("Add Event") 
        .setPositiveButton(android.R.string.ok, 
          new DialogInterface.OnClickListener() { 
           @Override 
           public void onClick(DialogInterface dialog, int which) { 

            editEvent.setError(null); 
            editStartDate.setError(null); 

            boolean cancel = false; 
            View focusView = null; 

            if (TextUtils.isEmpty(editEvent.getText().toString()))) { 
             editEvent.setError("Please Enter Event Name."); 
             return; 
            } 

            if (TextUtils.isEmpty(editStartDate.getText().toString())) { 
             editStartDate.setError("Please Enter Event Start Date."); 
             focusView = editStartDate; 
             cancel = true; 
            } 


            if (cancel == true) { 
             Snackbar.make(findViewById(android.R.id.content), 
               "Event Unsuccessful.", Snackbar.LENGTH_LONG) 
               .setActionTextColor(Color.RED) 
               .show(); 
             focusView.requestFocus(); 
            } else { 
             // Some action here 
            } 
           } 
          }) 
        .setNegativeButton(cancel, new DialogInterface.OnClickListener() { 

         @Override 
         public void onClick(DialogInterface dialog, int which) { 
          dialog.dismiss(); 
         } 
        }); 
      AlertDialog dialog = builder.create(); 
      dialog.show(); 
     } 
    }); 
} 
} 
+0

является то, что '' edEvent' в IF (Textutils .isEmpty (edEvent)) {'?. Как насчет того, чтобы сначала прокомментировать другую проверку, а затем проверить первый код проверки. –

+0

Изменена эта строка и исправлена. –

ответ

0

Попробуйте так:

if (TextUtils.isEmpty(edEvent)) { 
    editEvent.setError("Please Enter Event Name."); 
    editEvent.requestFocus(); 
    return; 
} 
1

Этот ответ составлен из Android Dialog, keep dialog open when button is pressed.

Как написано в Dismissing Dialog API Guide,

Когда пользователь прикасается любой из кнопок действий, созданных с AlertDialog.Builder, система закрывает диалог для вас.

Таким образом, вам необходимо создать пользовательский прослушиватель кликов, чтобы предотвратить закрытие диалогового окна.

First Way
Вы можете предотвратить положительную кнопку от закрытия диалогового окна. Вы в основном нужно:

  1. Создать диалог с DialogBuilder
  2. шоу() диалог
  3. Найти кнопки в диалоговом окне, показанном и переопределить их onClickListener

Таким образом, создать класс слушателя :

class CustomListener implements View.OnClickListener { 
    private final Dialog dialog; 

    public CustomListener(Dialog dialog) { 
    this.dialog = dialog; 
    } 

    @Override 
    public void onClick(View v) { 
    // Do whatever you want here 

    // If you want to close the dialog, uncomment the line below 
    //dialog.dismiss(); 
    } 
} 

Затем при отображении диалогового использования:

AlertDialog dialog = dialogBuilder.create(); 
dialog.show(); 
Button theButton = dialog.getButton(DialogInterface.BUTTON_POSITIVE); 
theButton.setOnClickListener(new CustomListener(dialog)); 

Помните, что вам нужно отобразить диалоговое окно, иначе кнопка не будет доступна. Также не забудьте изменить DialogInterface.BUTTON_POSITIVE на любое значение, которое вы использовали для добавления кнопки. Также обратите внимание, что при добавлении кнопок в DialogBuilder вам необходимо указать onClickListeners - вы не можете добавить туда пользовательский прослушиватель, но диалог будет по-прежнему отменен, если вы не переопределите слушателей после вызова show().

Second Way

Вот пример того же подхода, использующего анонимный класс вместо так это все в одном потоке кода:

AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); 
builder.setMessage("Test for preventing dialog close"); 
AlertDialog dialog = builder.create(); 
dialog.show(); 

//Overriding the handler immediately after show is probably a better approach than OnShowListener as described below 
dialog.getButton(AlertDialog.BUTTON_POSITIVE).setOnClickListener(new View.OnClickListener() {    
    @Override 
    public void onClick(View v) { 
     boolean wantToCloseDialog = false; 

     //Do stuff, possibly set wantToCloseDialog to true then... 
     if(wantToCloseDialog) 
      dismiss(); 
     //else dialog stays open. Make sure you have an obvious way to close the dialog especially if you set cancellable to false. 
     } 
    }); 

 Смежные вопросы

  • Нет связанных вопросов^_^