如何解决更改RecyclerView项目的宽度会使视图消失
我有以下代码:
(在适配器的OnCreateViewHolder中调用setViewHolder)
override fun setViewHolder(parent: ViewGroup): BaseViewHolder<Task> {
return if (isHorizontal) {
val view =
LayoutInflater.from(parent.context)
.inflate(R.layout.horizontal_recycler_item,parent,false)
// Overriding default width
val params = view.layoutParams as ViewGroup.MarginLayoutParams
params.width = ((parent.width / 2.15) - params.marginStart - params.marginEnd).toInt()
view.layoutParams = params
TaskViewHolder(view)
} else {
val view =
LayoutInflater.from(parent.context)
.inflate(R.layout.details_list_item,false)
TaskViewHolder(view)
}
}
一切正常,直到刷新片段。这就是RecyclerView变得不可见的时候。但是,从setViewHolder
中删除设置宽度的那条线可以解决我的问题。
这是什么原因造成的?
解决方法
它变得不可见的原因是因为您直接用O(m+n)
设置了width
,
当parent.width
未被测量时,我们无法获得真实值。
这里提供了两种实现要求的方法。
1。测量后计算视图在布局中的尺寸
parent.width
在 view.measure(View.MeasureSpec,View.MeasureSpec)
之后,我们可以调用view.measure
或view.measuredWidth
以获取真实值并计算所需的大小。
view.measuredHeight
您只需要找出要计算的MeasureSpec。
但是请注意, (view.measuredWidth / 3).toInt()
会导致繁重的加载,您需要谨慎使用。
2。通过屏幕尺寸设置值
我们可以通过measure
在DisplayMetric
中获得屏幕分辨率,因此您可以计算所需的尺寸
context.resources.displayMetric
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。