android定义数据集,Android RecyclerView创建并绑定数据集更改的所...

我有一个非常大的应用程序,我几乎到处都使用RecylclerViews,

我知道如何实现RecyclerViews,我没有遇到任何问题!

但是最近我在其中一个房车上遇到了一个非常糟糕的延迟,(让我向你保证我的bindview方法非常好,我加载了asynctasks中的所有图像……),这是第一次显示RV我得到一个ANR!

经过几个小时的调试后,我发现每次数据集发生变化(notifyDataset()),包括RV第一次填充时,所有的视图都被创建和绑定(是的,就像调用onCreateView()的200倍一样,这与RecyclerView的理念正好相反!)

一旦创建并绑定了所有视图,应用程序就会开始正常运行,我的意思是不再需要onCreateView()和onBindView()调用所需的,没有任何延迟.

我知道找到原因真的很难,但我想也许有一个明显的设置或……导致SO用户的这个或一些过去的经验可能对我有所帮助.

编辑

显然原因是由于我的XML以及我如何使RV填充空闲区域,因为当我将其高度设置为指定值(例如400 dp)时,一切正常,但是如果我使用LinearLayout和layout_weight或者做与RelativeLayout相同(设置在对齐顶部元素下方和对齐底部元素上方)重新创建问题.

所以我可以说这个问题发生在需要动态计算RV的高度时我想它会创建所有它的孩子来计算它的高度,这显然是支持库中的一个错误(com.android.support: recyclerview-v7:当时23.4.0)

有人有解决方法吗?

或者也许可以告诉我我的错误?

对于未来的googlers

似乎解决方案是使用setAutoMeasureEnabled(false);在LayoutManager上.

此方法已在23.2.0版本的支持库中引入,并且应该有助于将wrap_content用作RV项的布局参数,

无论如何我用这个方法克服了我的问题,并且使用wrap_content来实现我的项目高度没有问题,

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值