-
Notifications
You must be signed in to change notification settings - Fork 751
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
嵌套使用,ItemViewDelegate对象出现多次重复加载,一直死循环。 #316
Comments
感谢反馈,但看起来你使用的这个下拉刷新组件并非谷歌官方提供的,因此我们无法了解它做了什么错误的事情,你能否提供最小可复现程序工程,或者根据你的 debug 发起 PR?
…________________________________
From: grayson <[email protected]>
Sent: Tuesday, March 9, 2021 8:37:56 PM
To: drakeet/MultiType <[email protected]>
Cc: Subscribed <[email protected]>
Subject: [drakeet/MultiType] 嵌套使用,ItemViewDelegate对象出现多次重复加载,一直死循环。 (#316)
SmartRefreshView + Multitype使用没有问题,数据可以正常加载。
ViewPager2 + Multitype使用没有问题,数据可以正常加载。
ViewPager2 + SmartRefreshView + Multitype使用就会出现重复加载的问题,严重时会出现死循环不停加载。
SmartRefreshView + Multitype 使用
[image]<https://user-images.githubusercontent.com/19201565/110471316-f5eac700-8116-11eb-81ca-6821d7e638e2.png>
[image]<https://user-images.githubusercontent.com/19201565/110471404-0e5ae180-8117-11eb-808f-c6522ff60f22.png>
ViewPager2 + SmartRefreshView + Multitype使用
[image]<https://user-images.githubusercontent.com/19201565/110471503-2af71980-8117-11eb-8563-5ae2978e0e54.png>
[image]<https://user-images.githubusercontent.com/19201565/110471541-35b1ae80-8117-11eb-9d5e-944279d7a358.png>
―
You are receiving this because you are subscribed to this thread.
Reply to this email directly, view it on GitHub<#316>, or unsubscribe<https://github.com/notifications/unsubscribe-auth/ABHZABTDX3N6BMGQBG2HSKLTCYJCJANCNFSM4Y3QKHHA>.
|
最小可复现程序工程已上传到Github。 |
排查出问题了吗?是因为什么问题导致的呢? |
@YunChe-Linghit 这个 issue 优先级不是很高,它大概率是你使用的另外的库的问题,因为 MultiType 理论上来说是很纯粹的,所以目前不会很紧急地进行处理,请再等等或尝试自行寻找原因和发起 PR。 |
我尝试验证您提供的方案,验证问题是否解决,结论是没有解决。使用您的方案,RecyclerView会导致测量大小不准确的问题,拉动RecyclerView到底部,出现自动定位到前面位置的问题。
…------------------ 原始邮件 ------------------
发件人: ***@***.***>;
发送时间: 2021年4月7日(星期三) 下午4:47
收件人: ***@***.***>;
抄送: ***@***.***>; ***@***.***>;
主题: Re: [drakeet/MultiType] 嵌套使用,ItemViewDelegate对象出现多次重复加载,一直死循环。 (#316)
我研究了一下,找到罪魁祸首了,RecyclerView.onMeasure()有这么一段判断:
final int widthMode = MeasureSpec.getMode(widthSpec); final int heightMode = MeasureSpec.getMode(heightSpec); final boolean measureSpecModeIsExactly = widthMode == MeasureSpec.EXACTLY && heightMode == MeasureSpec.EXACTLY; if (measureSpecModeIsExactly || mAdapter == null) { return; }
在你的嵌套情况下不知道是哪个父View传给了Recyclerview的高度标记是AT_MOST(上限),导致一直在重新计算;
我尝试重写了你的FastListView.onMeasure解决了:
override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) { val heightMode = MeasureSpec.getMode(heightMeasureSpec) if (heightMode != MeasureSpec.EXACTLY) { super.onMeasure(widthMeasureSpec, MeasureSpec.makeMeasureSpec( MeasureSpec.getSize(heightMeasureSpec), MeasureSpec.EXACTLY )) } else { super.onMeasure(widthMeasureSpec, heightMeasureSpec) } }
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub, or unsubscribe.
|
刚刚我没测试完全,除了标识,高度也必须和之前一样;两次嵌套的情况下第一次拿到的事最外层的高度,导致我刚刚的方法不可用,我就删掉了,我改成了下面这样应该可以解决,但是需要再优化: private var saveHeight = 0
override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) {
if (saveHeight > 0) {
super.onMeasure(widthMeasureSpec, MeasureSpec.makeMeasureSpec(
saveHeight,
MeasureSpec.EXACTLY
))
return
}
val heightMode = MeasureSpec.getMode(heightMeasureSpec)
if (heightMode == MeasureSpec.EXACTLY) {
saveHeight = MeasureSpec.getSize(heightMeasureSpec)
}
super.onMeasure(widthMeasureSpec, heightMeasureSpec)
} |
确实是不停的onMeasure导致的,我最近又发现了,版本是4.2.0版本,只是在ConstraintLayout布局中添加,并且有用到ViewPager2。 |
SmartRefreshView + Multitype使用没有问题,数据可以正常加载。
ViewPager2 + Multitype使用没有问题,数据可以正常加载。
ViewPager2 + SmartRefreshView + Multitype使用就会出现重复加载的问题,严重时会出现死循环不停加载。
SmartRefreshView + Multitype 使用
ViewPager2 + SmartRefreshView + Multitype使用
The text was updated successfully, but these errors were encountered: