2017-04-30 96 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

我必須先設置按鈕,然後得到的按鈕之後,並定義它們onClickListeners,類似於你做了什麼。一旦我調用了.getButton並用我自己的方法設置了點擊監聽器,它就可以正常工作。謝謝! – Sean

0

我希望下面的行能有所幫助,

webpageDialogBuilder.setCancelable(false); 
+0

我不害怕,謝謝! – Sean