2016-10-20 26 views
1

所以我有一个菜单,当点击一个按钮时弹出。在该菜单中,用户可以输入可以是字符串的“赋值名称”,以及将会是数字的“等级”和“可用的最大点数”。 现在我想确保用户在任何这些EditText字段中都不输入任何内容或null。那么有没有办法在输入有效输入之前禁用OK按钮。以下是弹出窗口的图片。Android:在特定条件下禁用AlertDialogBu​​ilder的确定按钮

enter image description here

下面是我在MainActivity

Button add = (Button)findViewById(R.id.addBtn); 
add.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view){ 
      LayoutInflater li = LayoutInflater.from(context); 
      View promptsView = li.inflate(R.layout.add_individual_name, null); 

      AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(context); 
      alertDialogBuilder.setView(promptsView); 

      final EditText assignmentName = (EditText) promptsView.findViewById(R.id.enteredIndividualName); 
      final EditText gradeReceived = (EditText) promptsView.findViewById(R.id.enteredUserGrade); 
      final EditText maxPoints = (EditText) promptsView.findViewById(R.id.enteredMaxPoints); 
      alertDialogBuilder.setCancelable(false) 
        .setPositiveButton("OK", new DialogInterface.OnClickListener() { 
         public void onClick(DialogInterface dialog, int id) { 
          String name = assignmentName.getText().toString(); 
          String grade = gradeReceived.getText().toString(); 
          String totalPossible = maxPoints.getText().toString(); 
          checkIfNameAlreadyExists(name); 
         } 
        }) 
        .setNegativeButton("Cancel", new DialogInterface.OnClickListener() { 
         public void onClick(DialogInterface dialog, int id) { 
          dialog.cancel(); 
         } 
        }); 

      final AlertDialog alertDialog = alertDialogBuilder.create(); 
      alertDialog.show(); 

     }}); 

代码另外,我要禁用“确定”按钮,如果“作业名称”我的数据库已经存在。我有一个函数来检查项目是否在数据库中退出。

让我知道你是否想看到AlertDialog或其他任何XML的代码。

感谢

回答

1

您应该添加TextWatcherEditText。在afterTextChanged中,只需检查启用/禁用的条件确定按钮

// Your alert dialog config 
... 
final AlertDialog alertDialog = alertDialogBuilder.create(); 
alertDialog.show(); 

// disable the button as default start 
alertDialog.getButton(AlertDialog.BUTTON_POSITIVE).setEnabled(false); 

// add TextWatcher for EditText 
editTextAssignmentName.addTextChangedListener(new TextWatcher() { 
    @Override 
    public void beforeTextChanged(CharSequence s, int start, int count, int after) {} 

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

    @Override 
    public void afterTextChanged(Editable s) { 

     if (s.length() >= 1) { // add your condition here, in your case it is checkIfNameAlreadyExists 
      alertDialog.getButton(AlertDialog.BUTTON_POSITIVE).setEnabled(true); 
     } else { 
      alertDialog.getButton(AlertDialog.BUTTON_POSITIVE).setEnabled(false); 
     } 
    } 
}); 
+0

感谢您的回答。但是我究竟在哪里放置了这段代码?如果我把它放在'alertDialogBu​​ilder.setCancelable(false)'行之前,那么“OK”按钮就会消失,如果我把它放在那行之后,那么它就不起作用。 –

+0

尝试把像我的答案代码块(在最终AlertDialog alertDialog = alertDialogBu​​ilder.create(); alertDialog.show();) –

+0

这工作完美,因为我的预期。非常感谢你! –

相关问题