Подтвердить что ты не робот

Скрыть клавиатуру при переходе от фрагмента к другому

У меня есть фрагмент, содержащий текст редактирования. Когда нажимается "Редактировать текст", отображается клавиатура. При нажатии кнопки "Сохранить" в верхнем углу приложение возвращается к предыдущему фрагменту, но клавиатура сохраняется.

Я хотел бы, чтобы клавиатура была скрыта при навигации к предыдущему фрагменту.

Пожалуйста, обратите внимание, что я пробовал это решение: Закрыть/скрыть Soft Keyboard для Android.

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

Я попытался использовать это в обоих фрагментах в методе onCreate.

Я также попытался скрыть мягкую клавиатуру в макете:

android:windowSoftInputMode="stateAlwaysHidden"

Ничего из этого не удалось, к сожалению.

Я бы опубликовал несколько фотографий, но пока у меня не хватает репутации. Я был бы признателен за любую конструктивную помощь и мнение и не забываю, что "Мудрый человек может больше узнать из глупого вопроса, чем глупец может извлечь уроки из мудрого ответа".:)

С уважением, Александра

4b9b3361

Ответ 1

Поместите код, скрывающий клавиатуру, в прослушиватель щелчков "кнопка сохранения" и используйте этот метод, чтобы скрыть клавиатуру:

    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);
         }
     }

Ответ 2

Самый простой способ скрыть клавиатуру во фрагменте или в Деятельности

Soluton: 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);

Ответ 3

Котлин

Для 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)

Спасибо Silvia H за код Java.

Ответ 4

  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);
         }
     }

Ответ 5

@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);
    }
}