Скрыть клавиатуру при переходе от фрагмента к другому
У меня есть фрагмент, содержащий текст редактирования. Когда нажимается "Редактировать текст", отображается клавиатура. При нажатии кнопки "Сохранить" в верхнем углу приложение возвращается к предыдущему фрагменту, но клавиатура сохраняется.
Я хотел бы, чтобы клавиатура была скрыта при навигации к предыдущему фрагменту.
Пожалуйста, обратите внимание, что я пробовал это решение:
Закрыть/скрыть Soft Keyboard для Android.
InputMethodManager imm = (InputMethodManager)getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(myView.getWindowToken(), 0);
Я попытался использовать это в обоих фрагментах в методе onCreate.
Я также попытался скрыть мягкую клавиатуру в макете:
android:windowSoftInputMode="stateAlwaysHidden"
Ничего из этого не удалось, к сожалению.
Я бы опубликовал несколько фотографий, но пока у меня не хватает репутации.
Я был бы признателен за любую конструктивную помощь и мнение и не забываю, что "Мудрый человек может больше узнать из глупого вопроса, чем глупец может извлечь уроки из мудрого ответа".:)
С уважением,
Александра
Ответы
Ответ 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);
}
}