Почему Android ViewPager2 теряет фокус при переключении между вкладками?

#android-edittext #android-viewpager2 #lost-focus

#android-edittext #android-viewpager2 #потерянный фокус

Вопрос:

У меня есть ViewPager2 в моем приложении для Android. Одна из страниц содержит поле EditText.

Сценарий, с которым я столкнулся, выглядит следующим образом:

  1. Установите фокус на текстовое поле -> отображение клавиатуры
  2. Переключитесь на другую страницу -> клавиатура отключается (поле потеряло фокус)
  3. Вернитесь к предыдущей вкладке и снова установите фокус на текстовом поле -> поле получит фокус, но фокус сразу же исчезнет. Повторное нажатие на поле вернет фокус.

Я подготовил небольшое демонстрационное приложение, чтобы продемонстрировать эту проблему: https://github.com/hilaza/SwitchTabsBugDemo

Я отладил его, и я обнаружил, что ViewPager удаляет фокус с моей страницы, думая, что страница была выбрана. Отлаживая его дальше, я увидел, что это как-то связано с методом RecyclerView didChildRangeChange, который ошибочно предполагает, что что-то изменилось.

Кто-нибудь случайно знает, почему это происходит, и что я могу сделать, чтобы обойти это?

Комментарии:

1. вам удалось найти решение проблемы? Столкнувшись с той же проблемой

Ответ №1:

Это странная ошибка, возникающая из-за поведения ресайклера. К сожалению, не могу объяснить, почему это происходит, но точно знаю, что эта строка может вам помочь:

 pager.offscreenPageLimit = 1
  

Или эквивалент в Java. Это может помочь, потому что оно отключает некоторые действия ресайклера. Буду рад, если кто-нибудь объяснит это лучше. Столкнулся с той же проблемой и решил ее с помощью этой.