web-dev-qa-db-ja.com

フラグメントから別のフラグメントに移動するときにキーボードを非表示にします

編集テキストを含むフラグメントがあります。テキストの編集を押すと、キーボードが表示されます。上隅の[保存]ボタンを押すと、アプリケーションは前のフラグメントに戻りますが、キーボードは保持されます。

前のフラグメントに移動するときにキーボードを非表示にしたいのですが。

私はこの解決策を試したことに注意してください: Androidソフトキーボード を閉じる/非表示にします。

InputMethodManager imm = (InputMethodManager)getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(myView.getWindowToken(), 0);

OnCreateメソッドで、両方のフラグメントでこれを使用しようとしました。

また、レイアウトでソフトキーボードを非表示にしようとしました。

Android:windowSoftInputMode="stateAlwaysHidden"

残念ながら、これらのどれも機能しませんでした。

写真を投稿したかもしれませんが、まだ十分な評判はありません。私は建設的な助けと意見に感謝し、「愚かな人が賢明な答えから学ぶよりも、賢い人は愚かな質問から多くを学ぶことができる」ことを忘れないでください。 :)

よろしく、アレクサンドラ

31

キーボードを非表示にするコードを「保存ボタン」クリックリスナーに配置し、このメソッドを使用してキーボードを非表示にします。

    public static void hideKeyboard(Activity activity) {
        InputMethodManager inputManager = (InputMethodManager) activity
        .getSystemService(Context.INPUT_METHOD_SERVICE);

        // check if no view has focus:
         View currentFocusedView = activity.getCurrentFocus();
         if (currentFocusedView != null) {
             inputManager.hideSoftInputFromWindow(currentFocusedView.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
         }
     }
84
Silvia H

フラグメントまたはアクティビティでキーボードを非表示にする最も簡単な方法

ソルトン:1

//hide keyboard
public static void hideKeyboard(Context ctx) {
    InputMethodManager inputManager = (InputMethodManager) ctx
            .getSystemService(Context.INPUT_METHOD_SERVICE);

    // check if no view has focus:
    View v = ((Activity) ctx).getCurrentFocus();
    if (v == null)
        return;

    inputManager.hideSoftInputFromWindow(v.getWindowToken(), 0);
}

解決策:2

    InputMethodManager inputMethodManager = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE);
    inputMethodManager.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0);
2
chand becse

コトリン

Kotlinの場合、これをトップレベル関数として使用できます。コードをUtils.ktなどの別のクラスに追加するだけです。

fun hideKeyboard(activity: Activity) {
    val inputMethodManager =
        activity.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager

    // Check if no view has focus
    val currentFocusedView = activity.currentFocus
    currentFocusedView?.let {
        inputMethodManager.hideSoftInputFromWindow(
            currentFocusedView.windowToken, InputMethodManager.HIDE_NOT_ALWAYS)
    }
}

フラグメントからアクセスするには、次のように呼び出します。

hideKeyboard(activity as YourActivity)

Javaコード。

1
@Override
    public void onDestroyView() {
        super.onDestroyView();
        View view = getActivity().getCurrentFocus();
        if (view != null) {
            InputMethodManager imm = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
            imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
    }
}
0
M.Namjo
  public void hideKeyboard(Activity activity) {
        InputMethodManager inputManager = (InputMethodManager) activity
        .getSystemService(Context.INPUT_METHOD_SERVICE);

        // check if no view has focus:
         View currentFocusedView = activity.getCurrentFocus();
         if (currentFocusedView != null) {
             inputManager.hideSoftInputFromWindow(currentFocusedView.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
         }
     }