2017-05-23 15 views
0

私は編集テキストで警告ダイアログを表示しています。ユーザーは何かを入力する必要があり、そうでない場合、システムはこの入力が必要であることを彼に警告する必要があります。入力が空であればEditTextの警告ダイアログが閉じます

これはアルターダイアログのコードです:

AlertDialog.Builder builder = new AlertDialog.Builder(this); 
    builder.setTitle("Razlog storniranja?"); 

    // Set up the input 
    final EditText input = new EditText(this); 
    // Specify the type of input expected; this, for example, sets the input as a password, and will mask the text 
    input.setInputType(InputType.TYPE_CLASS_TEXT); 
    input.setSingleLine(false); 
    input.setImeOptions(EditorInfo.IME_FLAG_NO_ENTER_ACTION); 
    builder.setView(input); 

    // Set up the buttons 
    builder.setPositiveButton("Spremi", new DialogInterface.OnClickListener() { 
     @Override 
     public void onClick(DialogInterface dialog, int which) { 

     } 
    }); 
    builder.setNegativeButton("Otkaži", new DialogInterface.OnClickListener() { 
     @Override 
     public void onClick(DialogInterface dialog, int which) { 
      dialog.cancel(); 
     } 
    }); 
    builder.setOnDismissListener(new DialogInterface.OnDismissListener() { 
     @Override 
     public void onDismiss(DialogInterface dialog) { 

      if (m_Text.length()==0) 
      { 
       input.setHint("Morate upisati razlog storniranja kartice (naloga)!"); 
       input.setError("Upišite razlog storniranja!"); 

      } 

     } 
    }); 

    builder.show(); 

しかし、正のボタン、入力時にユーザーのクリックは、ダイアログが閉じられた空のとき。ダイアログを閉じるのを避けるためにコードに何かがありませんか?私は解決策を見つけたと思う

EDIT

。最後の行builder.show();を削除する必要があり、その代わりに、コードのこの作品は、追加する必要があります。

builder.setView(input); 
    final AlertDialog alertDialog = builder.create(); 
    alertDialog.show(); 

    alertDialog.getButton(AlertDialog.BUTTON_POSITIVE).setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Boolean wantToCloseDialog = (input.getText().toString().trim().isEmpty()); 
      // if EditText is empty disable closing on possitive button 
      if (!wantToCloseDialog) { 
       input.setHint("Morate upisati razlog storniranja kartice (naloga)!"); 
       input.setError("Upišite razlog storniranja!"); 
       alertDialog.dismiss(); 
      } 
     } 
    }); 

私は、これは他人を助けることを願っています。

+0

可能な複製を助けるhttps://stackoverflow.com/questions/11363209/ alertdialog-with-positive-button-and-validating-custom-edittext) –

答えて

1

まあ、私はあなたがしようとしていることの手掛かりを持っていません。

あなたのコードを使用してたときに私が持っていたエラーは:

java.lang.NullPointerException: Attempt to invoke virtual method 'int java.lang.String.length()' on a null object reference

m_Textを初期化する必要があります。

m_Textを変更する必要があるかもしれませんonDismiss方法に、初期化されていない場合:

if (m_Text != null && m_Text.length()==0){ //this line 
    input.setHint("Morate upisati razlog storniranja kartice (naloga)!"); 
    input.setError("Upišite razlog storniranja!"); 
} 

解約について、あなたはbuilder.cancelable(false);といつでも必要に応じて、builder.dismiss()する必要があります。

builder.setPositiveButton("Spremi", new DialogInterface.OnClickListener() { 
     @Override 
     public void onClick(DialogInterface dialog, int which) { 
      m_Text = input.getText().toString(); 

      if (m_Text.isEmpty()) { 
       input.setHint("Morate upisati razlog storniranja kartice (naloga)!"); 
       input.setError("Upišite razlog storniranja!"); 
       input.setFocusable(true); 
      }else{ 
       dialog.dismiss(); 
      } 
     } 
    }); 
1

empty文字列をチェックするTextUtils.isEmpty()を使用してください。

これを試してみてください:

builder.setPositiveButton("Spremi", new DialogInterface.OnClickListener() { 
    @Override 
    public void onClick(DialogInterface dialog, int which) { 

     if(TextUtils.isEmpty(input.getText().toString())) { 
      // Empty 
      input.setError("Input is required!"); 
     } else { 
      // Do something... 
     } 
    } 
}); 

希望これは([正のボタンおよび検証を行うカスタムのEditTextとAlertDialog]の〜

関連する問題