所以当点击一个按钮时,我会弹出一个菜单。在该菜单中,用户可以输入" Assignment Name"可以是一个字符串,"等级"和"最高积分"这将是数字。
现在我想确保用户不会在任何EditText字段中输入任何内容或null
。那么有没有办法在输入有效输入之前禁用OK
按钮。下面是弹出窗口的图片。
以下是我在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();
}});
另外,我想禁用" OK"按钮,如果"分配名称"已存在于我的数据库中。我有一个函数来检查项目是否退出数据库。
如果您想查看AlertDialog
或其他任何内容的XML代码,请与我们联系。
由于
答案 0 :(得分:1)
您应该为TextWatcher
添加EditText
。在afterTextChanged中,只需检查启用/禁用OK按钮的条件
// 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);
}
}
});