ширину самого широкого элемента? В итоге в ресайклере будут группы элементов, у каждой из групп своя ширина.
Если сделать ресайклер для каждой из групп, то выглядит хорошо, но подтормаживает.
Вопрос не понятен Можешь переформулировать?
Мессенджер, в котором каждый элемент сообщения это отдельный айтем. Группа - это одно сообщение. Нужно чтобы все элементы, относящиеся к этому сообщению, имели одинаковую ширину. Есть, конечно, вариант сделать все элементы одинаковой ширины, но тогда короткие сообщения будут выглядеть не очень красиво.
Можешь попробовать просто расположить элементы с шириной wrap_content в RecyclerView, но сделать callback который будет дергаться из viewTreeObserver.addOnGlobalLayoutListener Этот метод вызывается когда элементы расположены во View, только тогда ты сможешь получить ширину элементов. Потом отдаешь эти результаты в Fragment или Adapter. Когда ширина каждого элемента группы посчитана, выбираешь максимальную ширину и меняешь данные своего содержимого так, что в данных твоего item будет храниться высота, которая будет у элемента (до этого мог передавать отрицательное число как результат того, что ширина не известна). Эта ширина будет у каждого твоего элемента. После вызываешь notifyDataSetChanged, но конкретно для твоей группы элементов, у которой ты считал ширину Важно, что когда ты не знаешь точную ширину у элементов нужно задавать visibility = View.GONE. Иначе будут мерцания
Проблема в том, что не все элементы одной группы всегда видны на экране. Например, я делаю небольшой скролл и вижу только самый верхний элемент группы. Забиндятся сразу еще пару элементов, которые ниже и не видны на экране, но там дальше могут быть еще элементы, которые забиндятся только при еще большем скролле вниз и тогда ширина группы может увеличиться.
Мне кажется не стоит впринципе разделять сообщение на элементы таким образом
Обсуждают сегодня