2017-04-30 6 views
0

現在、私は多数のダイアログレイアウトを持っているので、カスタムダイアログを作成する必要はなく、それぞれに対して行う必要はありません。ポジティブボタンが押されてEditTextが空のときに閉じることからですか?EditTextが空のときにAlertDialogが終了しないようにする

現在、私はEnterキーを押すたびにダイアログを閉じ、EditTextフィールドには何も表示されません。

public AlertDialog webpageDialog() { 
    AlertDialog.Builder webpageDialogBuilder = new AlertDialog.Builder(context); 
    LayoutInflater inflater = LayoutInflater.from(context); 
    webpageDialogBuilder.setView(inflater.inflate(R.layout.dialog_webpage, null)) 
      .setNegativeButton(context.getString(R.string.cancel), new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int id) { 
        dialog.cancel(); 
       } 
      }); 
    final AlertDialog webpageDialog = webpageDialogBuilder.create(); 

    webpageDialog.setButton(DialogInterface.BUTTON_POSITIVE, context.getString(R.string.enter), new DialogInterface.OnClickListener() { 
     public void onClick(DialogInterface dialog, int id) { 
      EditText webpageInput = (EditText) webpageDialog.findViewById(R.id.dw_et_webpage_address); 
      Log.d(TAG, "Positive on click"); 
      if(TextUtils.isEmpty(webpageInput.getText().toString())){ 
       Log.d(TAG, "Edit text empty"); 
       webpageInput.setError(context.getString(R.string.error_web_required)); 
      } else { 
       Log.d(TAG, "Edit text not empty"); 
       ms.setUriString("http://" + webpageInput.getText().toString()); 
       ms.returnWithResult(1); 
       dialog.cancel(); 
      } 
      Log.d(TAG, "Returning"); 
     } 
    }); 
    Log.d(TAG, "Returning dialog"); 
    return webpageDialog; 
} 

答えて

1

これは私がやっている方法です。

 AlertDialog.Builder builder = new AlertDialog.Builder(this); 

     LinearLayout layout = new LinearLayout(this); 
     layout.setOrientation(LinearLayout.VERTICAL); 

     EditText yourEditText = new EditText(this); 
     layout.addView(yourEditText); 

     builder.setView(layout); 

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

      } 
     }); 
     builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() { 
      @Override 
      public void onClick(DialogInterface dialog, int which) { 
       dialog.cancel(); 
      } 
     }); 

     final AlertDialog dialog = builder.create(); 

     dialog.show(); 

     dialog.getButton(AlertDialog.BUTTON_POSITIVE).setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 

       if ("".equals(yourEditText.getText().toString().trim())) { 
        //this will stop your dialog from closing 
        yourEditText.setError("This field is required!"); 
        return; 

       } 

       //you logic here 


       dialog.dismiss(); 

      } 
     }); 
+0

を助けることができます。一度私が.getButtonを呼び出して、自分のメソッドでクリックリスナーを設定したらうまくいきました。ありがとう! – Sean

0

私は次の行を願っていますが、私は最初のボタンを設定して、その後、ボタンを取得し、あなたがやっていることと似彼らonClickListenersを定義しなければならなかった、

webpageDialogBuilder.setCancelable(false); 
+0

喜びはありません私は恐れて、とにかく感謝しています! – Sean

関連する問題