在我的应用程序中,我有一个功能,可以使用输入文本检查显示的AlertDialog中输入的文本。如果文本等于字符串变量,则返回True,否则返回False,并捕获此结果值以继续条件代码。
但这似乎有点困难,因为我在其他帖子中读到了如何解决同样的问题。
我已经这样做了:
private boolean checkAdministratorPassword() {
final enterPasswordResult[0] = false;
AlertDialog.Builder alert = new AlertDialog.Builder(mContext);
alert.setTitle("Confirm action");
alert.setIcon(R.drawable.ic_launcher);
alert.setMessage("Enter administrator pass to continue");
final EditText input = new EditText(mContext);
input.setPadding(5, 0, 5, 0);
alert.setView(input);
alert.setPositiveButton("Accept", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
String strPass = input.getEditableText().toString();
if (strPass.length() == 0) {
dialog.cancel();
}
if (strPass.equalsIgnoreCase(Constantes.ADMIN_PASS)) {
enterPasswordResult[0] = true;
dialog.cancel();
} else {
Toast.makeText(mContext, "Invalid pass..!!", Toast.LENGTH_LONG).show();
dialog.cancel();
}
}
});
alert.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
dialog.cancel();
}
});
AlertDialog alertDialog = alert.create();
alertDialog.show();
return enterPasswordResult[0];
}
我用这种方式调用函数:
If ( checkAdministratorPassword() == True ){
//true conditions
}
但问题是检查函数不会等待结果继续使用代码,它只会自行继续,我不会得到合适的行为。
答案 0 :(得分:1)
问题是您正在尝试在程序的logcal流程中处理异步事件。如果您创建Dialog
它自己的类并使用Interface
回调您的主机活动,则可以执行此操作。查看DialogFragment上的文档。
public interface PasswordCheckListener{
public void valid(boolean check);
}
private static class PasswordDialog extends DialogFragment {
private PasswordCheckListener listener;
public static PaswordDialog newInstance(PasswordCheckListener listener){
this.listener = listener;
}
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
//Put your dialog creation code here
}
private checkAdminPassword(){
//Whatever your check passowrd code is
listener.valid(result);
}
}
我意识到我没有为你实现所有代码,但这是一般的想法。通过使用界面,您可以在用户输入密码并按提交时回叫主持人Activity
或Fragment
。然后,您可以在事件发生时处理事件,而不必在程序流程中处理它。
答案 1 :(得分:0)
谢谢大家的回答!!我找到了通过创建一个活动主题“Theme.Dialog”,输入文本和两个按钮(接受,取消)来实现此问题的正确方法,我开始此活动的结果要求用户输入管理员传递给继续,检查字符串,然后再次返回上一个活动的onActivityResult()并使用正确的信息继续。