2015-01-20 56 views
2

我在顯示DialogFragment提示用戶提供輸入。我想驗證此輸入(不應該爲空),並在驗證失敗時顯示Toast而不關閉對話框檢查DialogFragment中的EditText值

當前,當驗證失敗時顯示Toast,但對話框被取消。我如何防止這種情況?

DialogFragment類:

public class DialogFragmentAddNewFolder extends DialogFragment implements DialogInterface.OnClickListener { 

    private EditText etName; 
    private DialogFragmentAddNewFolderListener mListener; 

    public interface DialogFragmentAddNewFolderListener { 
     public void onAddNewFolderPositiveClick(Folder folder); 
    } 

    @NonNull 
    @Override 
    public Dialog onCreateDialog(Bundle savedInstanceState) { 
     AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); 
     LayoutInflater inflater = getActivity().getLayoutInflater(); 
     View ourView = inflater.inflate(
       R.layout.dialogfragment_add_note, null); 
     builder.setView(ourView); 
     etName = (EditText) ourView.findViewById(R.id.etAddFolder); 

     builder.setTitle(R.string.dialogfragment_add_folder_title); 

     builder.setPositiveButton(
       R.string.dialogfragment_add_folder_pos_btn, this); 
     builder.setNegativeButton(
       R.string.dialogframent_add_folder_neg_btn, this); 
     return builder.create(); 
    } 

    @Override 
    public void onClick(DialogInterface dialog, int which) { 
     switch (which) { 
      case DialogInterface.BUTTON_POSITIVE: 
       String name = etName.getText().toString(); 
       if (name.equals("")) { 
        Toast.makeText(getActivity(), "Provide a name", Toast.LENGTH_SHORT).show(); 
       } else { 
        Folder folder = new Folder(); 
        folder.setName(name); 
        mListener.onAddNewFolderPositiveClick(folder); 
       } 
       break; 

      case DialogInterface.BUTTON_NEGATIVE: 
       dialog.dismiss(); 
       break; 
     } 
    } 

    @Override 
    public void onAttach(Activity activity) { 
     super.onAttach(activity); 
     try { 
      mListener = (DialogFragmentAddNewFolderListener) activity; 
     } catch (ClassCastException e) { 
      throw new ClassCastException(activity.toString() 
        + "Must implement DialogFragmentAddNewFolderListener."); 
     } 
    } 
} 
+1

可能重複[如何防止關閉一個對話框,點擊一個按鈕時(http://stackoverflow.com/questions/2620444/how-to-prevent-a-dialog-from-closing-當-A-按鈕是點擊) – 2015-01-20 19:46:44

回答

0

嘗試應用文本更改偵聽到您的EditText並就聽衆使用InputFilter。然後,您可以在該過濾器中執行驗證邏輯。

在你的情況你可能根本不需要這個過濾器,你可以簡單地在監聽器邏輯中進行檢查。例如

yourEditText.addTextChangedListener(new TextWatcher() { 

    @Override 
    public void afterTextChanged(Editable s) { 

    } 

    @Override 
    public void beforeTextChanged(CharSequence s, int start, int count, int after) { 

    } 

    @Override 
    public void onTextChanged(CharSequence s, int start, int before, int count) { 
     doYourChecking(); 
    } 

});