Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/373.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
Java 在android studio中按键盘上的enter键,提交包含EditText的AlertDialog.Builder_Java_Android_Android Alertdialog - Fatal编程技术网

Java 在android studio中按键盘上的enter键,提交包含EditText的AlertDialog.Builder

Java 在android studio中按键盘上的enter键,提交包含EditText的AlertDialog.Builder,java,android,android-alertdialog,Java,Android,Android Alertdialog,这是我为AlertDialog.Builder编写的代码,它有一个带有EditText的自定义视图。在EditText中输入值后,我希望键盘上的Enter键与AlertDialog.Builder的PositiveButton的操作方式相同。我已经在XML文件中包含了必要的“imeOptions”部分。我在按Enter键时成功地执行了代码,但AlertDialog.Builder仍在屏幕上,不会像单击AlertDialog.Builder上的PositiveButton时那样关闭 //A

这是我为AlertDialog.Builder编写的代码,它有一个带有EditText的自定义视图。在EditText中输入值后,我希望键盘上的Enter键与AlertDialog.Builder的PositiveButton的操作方式相同。我已经在XML文件中包含了必要的“imeOptions”部分。我在按Enter键时成功地执行了代码,但AlertDialog.Builder仍在屏幕上,不会像单击AlertDialog.Builder上的PositiveButton时那样关闭

    //AlertDialog to set weekly income
    incomeAlert = new AlertDialog.Builder(this);
    incomeInflater = this.getLayoutInflater();
    incomeDialogView = incomeInflater.inflate(R.layout.activity_weekincome, null);
    incomeAlert.setView(incomeDialogView);
    et_WeekIncome = incomeDialogView.findViewById(R.id.ls_WeekIncome);
    et_WeekIncome.setOnEditorActionListener(new EditText.OnEditorActionListener() {
        @Override
        public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
            if (actionId == EditorInfo.IME_ACTION_DONE) {
                submitIncome();
                return true;
            }
            return false;
        }
    });
    incomeAlert.setPositiveButton("OK", new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int whichButton) {
            submitIncome();
        }
    });
提前感谢您的帮助

更新:通过添加另一段代码,我成功地关闭了AlertDialog.Builder,如下所示

        AlertDialog incomeDialog = incomeAlert.create();
        incomeDialog.show();
然后,当需要解雇时,我使用

        incomeDialog.dismiss();
由于Dismise()不适用于AlertDialog.Builder,因此我必须通过AlertDialog创建生成器。然后我在AlertDialog上调用disclesh()


谢谢大家的输入。

您可以使用OnKeyListener和编辑文本来处理特定的按键

mEditTV.setOnKeyListener(new View.OnKeyListener() {

    public boolean onKey(View v, int keyCode, KeyEvent event) {
        if (keyCode == KeyEvent.KEYCODE_ENTER) {
            // do action
            return true;
        }
        return false;
    }
});

您可以通过这种方式使用上面的setOnKeyListener

et_WeekIncome.setOnKeyListener(new OnKeyListener(){
public boolean onKey(View v, int keyCode, KeyEvent event)
{
    if (event.getAction() == KeyEvent.ACTION_DOWN)
    {
        switch (keyCode)
        {
          case KeyEvent.KEYCODE_ENTER:
            submitIncome();
            return true;

          default:
            break;
        }
      }return false;
     }
});
由于Dismise()不适用于AlertDialog.Builder,因此我必须通过AlertDialog创建生成器。然后我在AlertDialog上调用disclesh()

还有另一种解决此问题的方法:使用SetOnSwowListener回调来设置密钥侦听器。这使您可以访问对话框的disclose()方法


您需要处理按下enter按钮时的操作。@vMysterion,我成功地执行了按下enter键时要运行的“submitIncome”代码。但是,我面临的问题是AlertDialog.Builder不会自行关闭,它会停留在屏幕上,但所需的操作会被执行。感谢有一种方法可以关闭AlertDialog。我不确定您是否可以从OnKeyListener中调用它。如果没有,可能尝试将AlertDialog上下文传递给OnKeyListener,并将其关闭。我尝试过,Disclease()方法可用于AlertDialog,但无法为AlertDialog.Builder找到类似的方法。我不确定我是否做错了什么。如果我将onKeyListener代码块放在foo.show()之后,这对我来说是有效的;行此操作有效,按Enter键即可完成“submitIncome”操作,但我也希望AlertDialog.Builder关闭,但除非我按其上的“确定”按钮或按“上一步”,否则它将保持在屏幕上。我已解决了关闭问题,请检查我对该问题的更新。谢谢你,但不幸的是,这给了我同样的结果。”“submitIncome”代码是按Enter键执行的,但AlertDialog.Builder仍在屏幕上。我解决了解雇问题,请检查我的问题更新。谢谢
incomeAlert.setOnShowListener((DialogInterface d) -> {
    et_WeekIncome.setOnKeyListener((v, keyCode, event) -> {
        if (event.getAction() == KeyEvent.ACTION_UP && keyCode == KeyEvent.KEYCODE_ENTER) {
            onClick(dialog, BUTTON_POSITIVE);
            d.dismiss();
            return true;
        }
        return false;
    });