onBackPressed方法无法正常工作

时间:2013-03-20 09:47:57

标签: android android-keypad

在我的应用中有一个EditText。我已在此活动中为此EditText调用了键盘显示。键盘显示&工作正常。

现在,我必须按两次按钮,一个用于隐藏键盘和按键。另一个用于执行某项任务(如保存到数据库的数据)。我不想再按两次按钮。

请指导我,或建议

这里有一些来自onBackPressed()

@Override
public void onBackPressed() {
    // TODO Auto-generated method stub
    super.onBackPressed();

    hideKeypad();

    //saving EditText data to db.
}

代码表单hideKeypad()

private void hideKeypad() {
       InputMethodManager imm = (InputMethodManager) 
        getSystemService(Context.INPUT_METHOD_SERVICE);
    imm.hideSoftInputFromWindow(edittext1.getWindowToken(), 0);
}

3 个答案:

答案 0 :(得分:1)

使用此方法它与您已经完成的相似,但我对其进行了少量修改。注册主布局的监听器并将其对象作为参数传递,以便当您单击编辑文本的一侧时,e。主布局键盘将消失。

/** 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);    
    }

答案 1 :(得分:0)

问题是键盘会消耗第一个BackPressed事件。你不能做任何事情。 解决这个问题只需听一下键盘隐藏事件并完成你的活动。

执行此操作的代码:

    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. 
}
});

答案 2 :(得分:0)

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

习惯在Android设备上使用软键盘的用户将被用来按回一次以关闭键盘,然后再次回到应用程序中。

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

除此之外,您的onBackPressed未被调用,因为当显示键盘时,键盘<{strong>}的onBackPressed正在运行 - 正如我们所见过的那样 - 是隐藏键盘的 - 并且为您的应用程序onBackPressed

如果你想这样做,我会回答你的方法,但我不推荐它。