AutoCompleteTextView:如果隐藏了软键盘,则关闭下拉列表并关闭活动?

时间:2016-07-16 07:32:59

标签: java android autocompletetextview onbackpressed

我有一个自定义的AutoCompleteTextView,在第一次背面按我要隐藏软键盘。在下一次背面按我想回到之前的活动。 所以把它分解如下:

  1. 如果按下设备的背面,则隐藏软键盘而不是 解雇AutoCompleteTextView或返回上一个 活动。
  2. 如果按下设备的背面并且键盘已经隐藏,那么 立即回到之前的活动。
  3. 对于第1部分,我在AutoCompleteTextView的自定义小部件中写了这个:

    @Override
      public boolean onKeyPreIme(int keyCode, @NonNull KeyEvent event) {
          InputMethodManager inputManager = (InputMethodManager) getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
          if (keyCode == KeyEvent.KEYCODE_BACK && isPopupShowing()) {
              if(inputManager.hideSoftInputFromWindow(findFocus().getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS)){
                  return true;
              }
          }
          return super.onKeyPreIme(keyCode, event);
      }
    

    这很好用。 对于part2,我修改了我的代码并在我的自定义AutoCompleteTextView中添加了一个监听器,如下所示:

    @Override
      public boolean onKeyPreIme(int keyCode, @NonNull KeyEvent event) {
          InputMethodManager inputManager = (InputMethodManager) getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
          if (keyCode == KeyEvent.KEYCODE_BACK && isPopupShowing()) {
            if(inputManager.isAcceptingText()){
              if(inputManager.hideSoftInputFromWindow(findFocus().getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS)){
                return true;
              }
            } else {
              callback.onSecondClick();
            }
          }
          return super.onKeyPreIme(keyCode, event);
      }
      public void setCallback(MyAutoCompleteTextViewInterface callback){
          this.callback = callback;
      }
      public interface MyAutoCompleteTextViewInterface{
          void onSecondClick();
      }
    

    在我的活动中,我做到了:

    @Override
        public void onSecondClick() {
            finish();
        }
    

    问题在于,在第一次背面按下它会隐藏软键盘,但在下一次按下时它会解除下拉列表。然后我需要第三次按回去才能进入上一个活动。

    我知道我的方法存在问题,但无法弄明白。

0 个答案:

没有答案