Причина, по которой вы получаете нулевое значение.
Для этого я приведу пример:
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
holder.card?.viewTreeObserver?.addOnGlobalLayoutListener(object : ViewTreeObserver.OnGlobalLayoutListener{
override fun onGlobalLayout() {
holder.card?.getViewTreeObserver()?.removeGlobalOnLayoutListener(this);
Log.e("widths", holder.card?.measuredWidth.toString())
}
})
Log.e("text","i am here")
}
Вывод этого кода:
E/text: i am here
E/text: i am here
E/widths: 1080
E/widths: 1080
какв каждом примере вы можете увидеть мои текст Log
, прежде чем получить ширину.Причина в том, что мой bindviewholder
находится в процессе установки данных для просмотра.После завершения процесса он предоставит правильное значение моего width
.
Та же проблема, что и с вами.как вы прокомментировали, ваши значения возвращают 0 вне функции.это потому что вне функции ваш onbindviewholder
в процессе.
Лучший способ решить вашу проблему -
. Вы можете использовать SharedPreferences , чтобы сохранить ширину в Local.Для объяснения вы можете проверить этот ответ, который он предоставил надлежащим способом сделать это.
Если есть что-то, что я могу помочь, просто прокомментируйте вашу проблему