0

Я хочу, чтобы обнаружить, когда мягкая клавиатура отображается и скрыта. Для этого я делаю так:Android-клавиатура: onReceiveResult огонь с RESULT_SHOWN после немедленно RESULT_HIDDEN

public class ALEditText extends EditText { 
    private ALSoftInputListener mSoftInputListener; 

    private static class SoftInputReceiver extends ResultReceiver { 
    private static final int RESULT_UNCHANGED_HIDDEN = 1; 
    private static final int RESULT_SHOWN = 2; 
    private static final int RESULT_HIDDEN = 3; 
    private static final int RESULT_UNCHANGED_SHOWN = 0; 
    private ALSoftInputListener mListener; 

    public SoftInputReceiver(ALSoftInputListener listener) { 
     super(null); 
     this.mListener = listener; 
    } 

    public void onReceiveResult(int result, Bundle data) { 
     switch (result) { 
     case RESULT_UNCHANGED_SHOWN /*0*/: 
     case RESULT_SHOWN /*2*/: 
      if (this.mListener != null) { 
      this.mListener.onSoftInputShown(); 
      } 
     case RESULT_UNCHANGED_HIDDEN /*1*/: 
     case RESULT_HIDDEN /*3*/: 
      if (this.mListener != null) { 
      this.mListener.onSoftInputHidden(); 
      } 
     default: 
     } 
    } 
    } 

    public void showSoftInput() { 
    SoftInputReceiver receiver = new SoftInputReceiver(this.mSoftInputListener); 
    InputMethodManager imm = getInputMethodManager(); 
    imm.showSoftInput(this, 0, receiver); 
    } 

    public void HideSoftInput() { 
    SoftInputReceiver receiver = new SoftInputReceiver(this.mSoftInputListener); 
    InputMethodManager imm = getInputMethodManager(); 
    imm.hideSoftInputFromWindow(getWindowToken(), 0, receiver); 
    } 

    public void SetSoftInputListener(ALSoftInputListener listener) { 
    this.mSoftInputListener = listener; 
    } 

    protected InputMethodManager getInputMethodManager() { 
    return (InputMethodManager) getContext().getSystemService("input_method"); 
    } 

} 

, но у меня есть странное поведение, что я не могу понять, когда я делать showSoftInput то виртуальная клавиатура шоу и событие onSoftInputShown также поднят, но это сразу после onSoftInputHidden и клавиатура все еще видна! позже, если я скрою клавиатуру, событие onSoftInputHidden снова не будет вызываться ... может ли кто-нибудь объяснить мне, что происходит?

ответ

0

Я нашел проблему - это потому, что я забыл перерыв в деле.