我用FragmentActivity做的UI,上面的Fragment我是自己动态创建管理的,onKeyUp我已经处理过了,在按了 back键以后会自动回退到上一个显示过的Fragment,
现在的问题是,当Fragment上面有EditText等输入框的时候,当输入法开启以后,按了 back键以后,就会自动关闭输入法并调用我自己的onKeyUp处理过程我希望能够按了back键以后,先把输入法取消,当用户再按back键的时候,再去走我自己的处理流程我想知道如何判断输入法是否已经开启,还有就是如何单独关闭输入法?baidu搜的答案是 InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
boolean isOpen=imm.isActive();, 但是用下来不管用
哪位大神已经过源码的?指点一下Activity自己是怎么处理back键取消输入法的?

解决方案 »

  1.   

    即使我在onKeyDown里面写了
    public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount()==0){
    InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
    if(imm.isActive()){
    imm.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(),
    InputMethodManager.HIDE_NOT_ALWAYS);
    }
    return true;
    }
    return super.onKeyDown(keyCode, event);
    }还是一样啊,还是会走到onKeyUp事件里面去,实际上我需要的是当软键盘弹起时,按back键不触发我当前onKeyDown事件处理流程的办法
      

  2.   

    刚刚试了下 onKey,虽然能监听 back键,但是用
    (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE).isActive()却总是返回true,不知何故