【问题标题】:onBackPressed method is not working properlyonBackPressed 方法无法正常工作
【发布时间】:2013-03-20 09:47:57
【问题描述】:

在我的应用中有一个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);
}

【问题讨论】:

  • 您是否尝试在用户输入任何内容后隐藏键盘?
  • 不,但是我如何判断用户完成了他的输入@aneal
  • 您可能需要检查您的 onBackPressed() 方法是否实际执行(添加 log.d 或其他内容),而不是被其他内容(如软键盘)劫持。
  • 听他们按回车键或回车键,无论你有什么显示。

标签: android android-keypad


【解决方案1】:

使用这个方法和你已经做过的类似,但我很少修改它。注册主布局的侦听器并将其对象作为参数传递,以便当您单击编辑文本的外侧时,即主布局键盘将消失。

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

【讨论】:

  • 我已经尝试过.. 这将EditText 传递给方法,但它仍然无法正常工作@Akhilesh Mani
  • EditText 在我的应用中全屏显示.. @Akhilesh Mani
  • @PSK 好的,我认为 Mr.Me 是对的,您可以在这种情况下使用 EditorAction。
【解决方案2】:

按回关闭键盘是 UI 的标准功能。为什么要更改此设置?

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

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

除此之外,您的onBackPressed 没有被调用,因为当显示键盘时,键盘onBackPressed 正在运行 - 正如我们都看到的那样 - 这是隐藏的键盘 - 不是您的应用程序的 onBackPressed

Mr.Me 的回答是,如果您确实想这样做的话,可以这样做,但我不推荐这样做。

【讨论】:

    【解决方案3】:

    问题在于 keyboard 使用了第一个 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. 
    }
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-02
      • 2021-12-29
      • 2014-09-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多