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