我有一个活动打开一个包含4个EditTexts的对话框,我需要用户输入所有编辑文本才能继续,如何强制用户输入所有字段?
修改 即使用户按下后退按钮 这是我的代码:
private void showEnterNamesDialog(final boolean edit){
final AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(this);
LayoutInflater inflater = this.getLayoutInflater();
final View dialogView = inflater.inflate(R.layout.enter_names_dialog, null);
dialogBuilder.setView(dialogView);
final EditText[] plyrs_et = new EditText[4];
plyrs_et[0] = (EditText)dialogView.findViewById(R.id.plyr1_et_dialog);
plyrs_et[1] = (EditText)dialogView.findViewById(R.id.plyr2_et_dialog);
plyrs_et[2] = (EditText)dialogView.findViewById(R.id.plyr3_et_dialog);
plyrs_et[3] = (EditText)dialogView.findViewById(R.id.plyr4_et_dialog);
if(edit){
String[] names = gameList.getNames();
for (int i = 0; i < 4; i++){
plyrs_et[i].setText(names[i]);
}
dialogBuilder.setNegativeButton(getResources().getString(R.string.cancel), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
}
});
}
dialogBuilder.setTitle(getResources().getString(R.string.enter_players_names));
dialogBuilder.setPositiveButton(getResources().getString(R.string.submit_btn), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
String[] names = new String[4];
for(int j = 0; j < 4 ; j++){
names[j] = plyrs_et[j].getText().toString();
}
if(names[0].isEmpty() || names[1].isEmpty() || names[2].isEmpty() || names[3].isEmpty()) {
Toast error = Toast.makeText(getApplicationContext(), getResources().getString(R.string.toast_alert), Toast.LENGTH_SHORT);
error.show();
}else {
if(edit){
//set the names in textViews
hp1.setText(names[0]);
hp2.setText(names[1]);
hp3.setText(names[2]);
hp4.setText(names[3]);
gameList.setNames(names);
}else {
gameList.setNames(names);
setHeaderFooter(names);
listView.setAdapter(mAdapter);
}
}
}
});
AlertDialog b = dialogBuilder.create();
b.show();
}
此代码仅提供Toast消息,但仍会关闭对话框。 有什么想法吗?
答案 0 :(得分:0)
通过覆盖正面按钮尝试此代码。如果验证失败,它将不会关闭警报对话框。
alertDialogBuilder.setCancelable(false)
.setPositiveButton("OK", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
// do nothing we overide this
}
})
.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,int id) {
dialog.cancel();
}
});
alertDialogBuilder.setTitle("Committee Details");
// create alert dialog
final AlertDialog alertDialog = alertDialogBuilder.create();
// show it
alertDialog.show();
alertDialog.getButton(AlertDialog.BUTTON_POSITIVE).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(validate()) {
//your work after validation and close alert dialog
alertDialog.dismiss();
}
}
});
并且在validate()方法中,您可以强制执行验证
public boolean validate() {
boolean t=true;
if(cName.getText().toString().length()==0) {
cName.setError("Commitee name cannot be Blank!!");
t=false;
}
if(amount.length()==0){
amount.setError("Amount cannot be Blank!!");
t= false;
}
if(duration.getText().toString().length()==0) {
duration.setError("Duration cannot be Blank!!");
t= false;
}
if(noOfMember.getText().toString().length()==0) {
noOfMember.setError("Number of Members cannot be Blank!!");
t= false;
}
if(StartDate.length()<10) {
StartDate.setError("Input Date");
t = false;
}
return t;
}