MotionLayout прерывает перерисовку (вложенных) подпредставлений - PullRequest
0 голосов
/ 03 апреля 2020

У меня проблемы с просмотром, который не обновляется в MotionLayout.

Похоже, что в какой-то момент механизм обновления / перерисовки MotionLayout выходит из строя, и подпредставления (включая вложенные) имеют случайные проблемы с обновлением себя на экране. То, что я испытал до сих пор:

  1. RecyclerView иногда не обновляется. Это происходит, когда новые данные доступны, я использую библиотеку Paging для заполнения данных. Я исправил это с обходом прокрутки на 1 пиксель, когда получил новые данные - recyclerView.smoothScrollBy(0,1). После этого RecyclerView начинает прекрасно перерисовываться.
  2. Когда клавиатура открыта, она случайно теряет вложенную перерисовку подпредставления. В github есть проблема , где парень воспроизводит все это, добавляя EditText к официальным MotionLayout примерам. Некоторые примеры проблем, с которыми я сталкиваюсь:
    • Я использую TextInputLayout с app:endIconMode="clear_text" в MotionLayout -> ConstraintLayout -> TextInputLayout, и кнопка X иногда не отображается, когда я начинаю печатать (также после закрытия клавиатуры).
    • TextView перерисован частично! Я показываю "No Results" или "No Posts" текст в TextView, переключаясь между ними в зависимости от логики c, но вместо обновления всего текста в интерфейсе отображается только "No". Я его отладил, Layout Inspector говорит, что все в порядке, значение текстового представления равно "No Results", но я не вижу его на экране.
    • Некоторые другие анимации не работают, например, неопределенная анимация прогресса вложенных SwipeRefreshLayout

ВАЖНО: Все проблемы обновления / перерисовки исправлены, когда я делаю переход! Когда я прихожу в какое-то запутанное состояние, когда 3 вложенных подпредставления заморожены / частично прорисованы, мне просто нужно нажать кнопку, которая запускает мой переход, и все они радостно перерисовывают себя!

Пожалуйста, дайте мне знать, если это известная проблема, и если есть обходной путь для этого. Я мог бы сделать невидимый переход в 1 пиксель, может быть, но я даже не могу определить, когда обновление MotionLayout прерывается, обработка клавиатуры и новых данных RecyclerView, кажется, не покрывает все случаи. В противном случае мне придется вернуться к ConstraintLayout и подумать о реализации потрясающей функциональности OnSwipe самостоятельно (если это возможно даже в ConstraintLayout).

1 Ответ

0 голосов
/ 16 апреля 2020

Не совсем ответ, но слишком длинный для комментария:

Поскольку вы сталкиваетесь с множеством проблем, возможно, с несколькими root причинами, я бы предложил создать проект Sandbox и воспроизводить каждую проблему за раз в безопасной и простой среде.

Мне кажется, что у вас есть одна проблема с библиотекой подкачки (не с motionLayout в данном случае) и другая проблема с EditText.

Вы должны проверить код подкачки без ML и проверьте вашу проблему с EditText без прокрутки. Я знаю, что это не большая помощь, но, возможно, руководство, как решить эти проблемы. Имейте в виду, что MotionLayout все еще находится в бета-версии, и особенно выпуск 2.0.0-бета02, а бета03 была довольно грязной с ошибками регрессии. Обновите до последней версии (бета04 на данный момент) или продолжайте использовать стабильную версию.

Иногда это также помогает искать официальные билеты на MotionLayout

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...