Что я намерен достичь
Вид элемента должен занимать всю высоту элемента
Возможно, высота элемента меньше высоты самого высокого элемента в recyclerview, и в этом случае он должен просто придерживаться вершины, как на скриншоте выше.
Ошибка, с которой я столкнулся
Как и на скриншоте выше, просмотры становятся усеченными.
Что я пробовал до сих пор
Сначала я пошел с wrap_content на recyclerview, теперь, когда он поддерживается. Это не сработало, когда ни один из видов, видимых на экране в то время, не был самым высоким. Это имеет смысл в том, как изложена иерархия представлений. Как может быть подсчитана высота того, что еще не было привязано к каким-либо данным, если высота зависит от этих данных?
Временное решение: S
Вместо того, чтобы пытаться настроить manmanager, я сначала пошел с тем, что, как мне казалось, нужно было сделать, - сначала изложив все виды элементов, чтобы выяснить их высоту.
В верхней части экрана есть индикатор прогресса и анимация, чтобы привлечь внимание пользователя, в то время как все это происходит, когда видимость recyclerview становится невидимой. Я использую две вещи: одного недостаточно - я подключил наблюдателя к вызову адаптера onViewAttached()
, и я также использовал прослушиватель изменений прокрутки. Там LinearSnapHelper подключен к просмотру ресайклера, чтобы привязать к соседнему (следующее или предыдущее, в зависимости от направления прокрутки) положение прокрутки.
В этой настройке
- Я перехожу к каждой позиции в recyclerview, используя
layoutManager.smoothScrollToPosition()
-
Получение высоты просмотра детей с помощью
View currentChildView = binding.nextRv.getChildAt(layoutManager.findFirstCompletelyVisibleItemPosition()); if (currentChildView != null) { currentChildHeight = currentChildView.getHeight(); }
в прослушивателе смены прокрутки на RecyclerView.SCROLL_STATE_IDLE
или передавая высоту наблюдаемому наблюдателю, упомянутому выше в адаптере onViewAttachedToWindow()
@Override
public void onViewAttachedToWindow(BindingViewHolder holder) {
if (mObserver != null) {
mObserver.onViewAttached(holder.binding.getRoot().getHeight());
}
}
- Сохранение
maxHeight
, которое изменяется на max maxHeight и новую высоту ребенка.
Как видно, это уродливо. Плюс это не дает мне текущую высоту взгляда - onAttached означает, что она просто привязана, не измеряется и не выкладывается. Это переработанное представление, а не представление, связанное с текущим элементом данных. Что представляет проблемы, такие как усечение вида, показанное выше.
Я также попробовал height_content height в представлении recycler и недействителен от родителя-реципилятора до тех пор, пока ресайлер и дочерний элемент на свитке не перейдут в SCROLL_STATE_IDLE. Не работает.
Я не уверен, как может помочь пользовательский layoutmanager.
Может ли кто-нибудь вести меня в правильном направлении?