Моя проблема звучит странно, но я быстро пойду к своей точке.
Я провел рефакторинг проекта, чтобы полностью преобразовать его в Lifecycle + Navigation (например, используя ViewModel
и NavController
).
На одном из моих графиков навигации, где пользователь регистрируется, есть Fragment
, в котором есть традиционный EditText
, чтобы пользователь мог ввести желаемый ник.
Проблема: , если пользователь начинает сначала вводить свой псевдоним, предлагая, таким образом, свою программную клавиатуру, а затем любой следующий Fragment
, к которому пользователь перешел (используя NavController#navigate
), содержимое будет пустым : ничего не появляется.
Чтобы устранить источник проблемы, я провел следующие тесты (с использованием тостов, точек останова и т. Д.):
- Проверка того, используются ли методы
onCreateView
и onAttached
при переходе к Fragment
✓ ;
- Проверка, виден ли раздутый вид целевого фрагмента, путем установки яркого фона ✓ (цвет никогда не виден);
- Использование
onGlobalLayout
в целевом представлении с раздутым фрагментом: иногда метод никогда не вызывается, но при его вызове оба значения height и width равны 0 .
Итак, вот оно. Как только раскроется клавиатура, для любого перемещаемого фрагмента высота и ширина вида будут установлены на 0. По крайней мере, любая навигация вызывает вызов onCreateView
.
.
Примечание: во фрагменте, который представляет EditText, я использую:
requireActivity (). GetWindow (). SetSoftInputMode (
WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);
Но удаление этого кода не имеет значения.
Я использую версию: 2.1.0-alpha05 (последняя на момент публикации). Я также пробовал стабильную версию 2.0.0 , но у меня та же проблема.
РЕДАКТИРОВАТЬ 1
Не берите в голову, кажется, что новая ConstraintLayout 2.0.0 beta 02
является виновником (вызывает много проблем с представлением переработчика) наряду с новым механизмом обратной навигации https://developer.android.com/guide/navigation/navigation-custom-back (начиная с AppCompat 1.1.0-alpha05
), вызывающим другие проблемы в моем приложении .