Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.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 onBackPressed方法工作不正常_Android_Android Keypad - Fatal编程技术网

Android onBackPressed方法工作不正常

Android onBackPressed方法工作不正常,android,android-keypad,Android,Android Keypad,在我的应用程序中有一个EditText。我已为此EditText调用了活动中的键盘显示。键盘显示和工作良好 目前,我必须按两次后退按钮,一次用于隐藏键盘,另一次用于执行某些任务(如将数据保存到数据库)。我不想按两次后退按钮。 请引导我,或建议 这里有一些来自onBackPressed() 代码表单hideKeypad() 使用这种方法,它与您已经做的类似,但我对其进行了一些修改。注册主布局的侦听器,并将其对象作为参数传递,以便在单击编辑文本的外侧时,即。主布局键盘将消失 /** Close Ke

在我的应用程序中有一个
EditText
。我已为此
EditText
调用了活动中的键盘显示。键盘显示和工作良好

目前,我必须按两次后退按钮,一次用于隐藏键盘,另一次用于执行某些任务(如将数据保存到数据库)。我不想按两次后退按钮。

请引导我,或建议

这里有一些来自
onBackPressed()

代码表单
hideKeypad()


使用这种方法,它与您已经做的类似,但我对其进行了一些修改。注册主布局的侦听器,并将其对象作为参数传递,以便在单击编辑文本的外侧时,即。主布局键盘将消失

/** Close Keypad on touch.
 * @param view on which click happens. */

 public void closeKeyPad(View view)
    {
        InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
        imm.hideSoftInputFromWindow(view.getWindowToken(), 0);    
    }

问题是键盘消耗了第一个
反压
事件。你对此无能为力。 要解决这个问题,只需听键盘隐藏事件并完成活动

执行此操作的代码:

    edit.setOnEditorActionListener(
     new EditText.OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
if (actionId == EditorInfo.IME_ACTION_SEARCH ||
        actionId == EditorInfo.IME_ACTION_DONE ||
        event.getAction() == KeyEvent.ACTION_DOWN &&
        event.getKeyCode() == KeyEvent.KEYCODE_ENTER) {
    if (!event.isShiftPressed()) {
       // the user is done typing.  finish the activity
       finish();
       return true; // consume.
    }                
}
return false; // pass on to other listeners. 
}
});

按back键关闭键盘是UI的标准功能。你为什么要改变这个

习惯在Android设备上使用软键盘的用户将习惯于按一次键关闭键盘,然后再按一次键返回应用程序

如果在显示键盘时让应用程序中的“后退”按钮向后移动,会使导航与标准Android导航不同,许多用户可能会对此感到失望

除此之外,您的
onBackPressed
不会被调用,因为当显示键盘时,键盘的
onBackPressed
会运行,正如我们所看到的,这就是隐藏键盘的地方,而not应用程序的
onBackPressed


Me先生的答案是,如果你真的想这样做,我不建议你这样做。

你有没有试过在用户输入他们正在输入的内容后隐藏键盘?没有,但我如何判断用户完成了输入@可能相关:你可能想检查你的
onBackPressed()
方法是否实际执行了(添加一个log.d或其他东西),而不是被其他东西(如软键盘)劫持听他们按回车键或回车键,无论你显示的是哪一个。我已经尝试了..这将
EditText
传递给方法,但它仍然不起作用@Akhilesh Mani
EditText
在我的应用程序中是全屏的..@AkhileshMani@PSK好的,我想我先生是对的,在这种情况下你可以使用EditorAction。
/** Close Keypad on touch.
 * @param view on which click happens. */

 public void closeKeyPad(View view)
    {
        InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
        imm.hideSoftInputFromWindow(view.getWindowToken(), 0);    
    }
    edit.setOnEditorActionListener(
     new EditText.OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
if (actionId == EditorInfo.IME_ACTION_SEARCH ||
        actionId == EditorInfo.IME_ACTION_DONE ||
        event.getAction() == KeyEvent.ACTION_DOWN &&
        event.getKeyCode() == KeyEvent.KEYCODE_ENTER) {
    if (!event.isShiftPressed()) {
       // the user is done typing.  finish the activity
       finish();
       return true; // consume.
    }                
}
return false; // pass on to other listeners. 
}
});