sat*_*iva 7 android android-support-library
当我快速滚动列表时,所有的recyclerviews有时会崩溃,因为我已更新为支持lib 25.0.0.没有布局动画师,一切正常,支持lib <25.
在RecyclerView中抛出异常,因为holder.itemView.getparent()不为null
if (holder.isScrap() || holder.itemView.getParent() != null) {
throw new IllegalArgumentException(
"Scrapped or attached views may not be recycled. isScrap:"
+ holder.isScrap() + " isAttached:"
+ (holder.itemView.getParent() != null));
}
Run Code Online (Sandbox Code Playgroud)
有没有其他人经历过这种行为?
Sab*_*rya 11
要防止此问题崩溃,您需要setHasStableIds(boolean)从适配器调用并将参数传递为true:
adapter.setHasStableIds(true);
Run Code Online (Sandbox Code Playgroud)
说明:调用时出现问题 adapter.notifyDataSetChanged();
在recyclerView随后调用detachAndScrapAttachedViews(recycler);它暂时分离和废料所有当前连接子视图.视图将被废弃到给定的视图中Recycler.在Recycler可能宁愿再利用报废的意见.
然后scrapOrRecycleView(recycler, (int) position, (View) child);被叫.此函数检查"hasStableIds"是true还是false.如果为false,则会出现以下错误:
"废弃或附加的视图可能无法回收."
稳定的ID允许View(RecyclerView,ListView等)优化notifyDataSetChanged调用之间项目保持不变的情况.
hasStableIds() == true指示项目ID是否在对基础数据的更改中保持稳定.
如果项目ID是稳定的,那么它可以被视图重用,即"循环"使得在调用之后重新渲染的过程变得notifyDataSetChanged()有效.如果项目ID不稳定,则无法保证该项目已被回收,因为无法跟踪它们.
注意:设置setHasStableIds()为true不是请求稳定ID的方法,而是告诉Recycler/List/Grid Views您提供所述稳定性.
| 归档时间: |
|
| 查看次数: |
4235 次 |
| 最近记录: |