10

フラグメントを変更するとき。画面にEditTextフィールドがあるため、これを使用してキーボードを閉じています。もっと良い方法が必要だと感じていますが、キーボードが画面上にあるかどうかを検出することについては何も見つかりませんでした。

Activity activity = getActivity();
InputMethodManager inputMethodManager = (InputMethodManager)  activity.getSystemService(Activity.INPUT_METHOD_SERVICE);
try
{
    inputMethodManager.hideSoftInputFromWindow(activity.getCurrentFocus().getWindowToken(), 0);
}
catch (Exception e)
{

}
4

3 に答える 3

4

さまざまなフラグメントへの呼び出しを実装するアクティビティでは、次のように記述します...

    InputMethodManager imm = (InputMethodManager)this.getSystemService(Context.INPUT_METHOD_SERVICE);
    imm.hideSoftInputFromWindow(getWindow().getDecorView().getWindowToken(), 0);
于 2014-08-25T02:19:22.893 に答える
-1

私が考えることができる唯一の本当の方法は、onConfigurationChanged(Configuration config)メソッドを使用することです:

KeyboardHiddenConfigurationの組み合わせでそれを行う必要があります。

class MyFrag extends Fragment{

  @Override
  public void onConfigurationChanged(Configuration config){
    //Check flags
    switch(config.keyboardHidden){
      case KEYBOARDHIDDEN_NO:
        // do something
        break;
      case KEYBOARDHIDDEN_YES:
        break;
    }
  }

}

これはもちろん、マニフェストと親アクティビティがこれらを構成変更として受け入れることに依存しています。

<activity ...
  android:configChanges="keyboardHidden|orientation|screenSize|screenLayout"/>

また、 には同じオーバーライド可能なメソッドがあることに注意しActivityてください。アクティビティは最初にメソッドを取得し、次にそれをアタッチされた に渡しFragmentます。

観察者の場合、コンテキストを使用してオンザフライでこれを行うことができます。

Configuration config = getResources().getConfiguration();

hardKeyboards も考慮に入れることを意図していますが、デバイス固有のバグに遭遇することは間違いありません!

于 2013-02-05T00:11:28.070 に答える