Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/225.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 关闭进度对话框失败_Android_Progressdialog - Fatal编程技术网

Android 关闭进度对话框失败

Android 关闭进度对话框失败,android,progressdialog,Android,Progressdialog,我试图在几秒钟后关闭一个ProgressDialog(仅视觉主题),但没有成功。要关闭对话框,我希望单击Enter键,但即使在事件中单击完成,对话框也始终可见。以下是我正在使用的代码: lectura.setOnKeyListener(new OnKeyListener() { public boolean onKey(View view, int keyCode, KeyEvent keyevent) { if(pDialog == null) { pD

我试图在几秒钟后关闭一个
ProgressDialog
(仅视觉主题),但没有成功。要关闭对话框,我希望单击Enter键,但即使在事件中单击完成,对话框也始终可见。以下是我正在使用的代码:

lectura.setOnKeyListener(new OnKeyListener() {
   public boolean onKey(View view, int keyCode, KeyEvent keyevent) {
      if(pDialog == null) {
           pDialog = new ProgressDialog(ValidacionBlueTooth.this);
           pDialog.setMessage("Sincronizando...");
           pDialog.setCancelable(false);
           pDialog.show();
      }

      if ((keyevent.getAction() == KeyEvent.ACTION_DOWN) && (keyCode == KeyEvent.KEYCODE_ENTER)) {
          if (pDialog.isShowing()) {
          pDialog.dismiss();
      }

      Intent intent = new Intent(ValidacionBlueTooth.this, Validador.class);
      startActivity(intent);
}
编辑

我得到这个消息,它阻止对话框关闭,也阻止继续运行代码

01-27 16:11:31.041: W/ViewRootImpl(6633): Cancelling event due to no window focus: KeyEvent { action=ACTION_UP, keyCode=KEYCODE_3, scanCode=4, metaState=0, flags=0x28, repeatCount=0, eventTime=81457114, downTime=81457113, deviceId=36, source=0x101 }

在keyListener之外创建一个类方法。然后在键侦听器中,关闭进度对话框

lectura.setOnKeyListener(new OnKeyListener() {
    public boolean onKey(View view, int keyCode, KeyEvent keyevent) {
    pDialog = new ProgressDialog(ValidacionBlueTooth.this);
    pDialog.setMessage("Sincronizando...");
    pDialog.setCancelable(false);
    pDialog.show()

    if ((keyevent.getAction() == KeyEvent.ACTION_DOWN) && (keyCode == KeyEvent.KEYCODE_ENTER)) {
        if (pDialog.isShowing()) {
            dismissDialog();
        }

        Intent intent = new Intent(ValidacionBlueTooth.this, Validador.class);
        startActivity(intent);
    }
}

private void dismissDialog() {
     pDialog.dismiss();
}

代码很奇怪。为什么要创建一个新的进度对话框,并在用户按键时显示它?似乎你应该在其他地方创建你的对话(而不是在键侦听器中),并保留对它的引用,而不是每次创建一个新的。让我解释一下。我正在用蓝牙设备读取二维码。我阅读我在EditText上留下的所有内容,每次设备完成读取代码时,都会模拟输入键的压力。然后,当用户使用设备读取代码时,我需要部署一个加载器,因为读取文本可能很短,也可能很长,这需要时间,并且当您在EditText、book reading和I use中完成读写时@GeorgeMulliganThat很奇怪,因此您的
Validador
活动从未显示?您可能在代码的其他地方出错。您当前的活动是否正在运行,按键时是否可见,因为我知道您说过按键是模拟的。这是Android source在打印该消息时的评论:“这是一个焦点事件,窗口当前没有输入焦点或已停止。这可能是一个从上一阶段返回的事件,但窗口已失去焦点或同时停止。”亲爱的,确定问题所在。我们还可以在您的代码中识别当按下一个键时OnKey立即启动对话框,但在设备下方读取二维码并键入EditText仍在写入,因此出现此问题并停止工作。当对话已经在进行时,它正在写作。我认为我的逻辑是错误的,我必须找到另一种方法来创造这个。