Joa*_*huk 28 android android-layout android-recyclerview
我在RecyclerView内部使用异构视图,如本教程中所示.
我在RecyclerView里面有一些物品也是RecyclerViews.难以想象?假设我要复制Play商店的布局:一个具有垂直线性布局的大型RecyclerView,并由许多元素填充:单个应用程序和应用程序轮播.
如果要添加的项目是单个应用程序的布局,则将使用ID 1,我将添加单个项目的布局.另外,如果我需要添加一个Carousel,那么我将在主RecyclerView中添加一个元素:另一个带有自己的适配器的RecyclerView.
这非常有效.滚动主RecyclerView时除外.为什么?因为某些视图在不再可见时被销毁,然后在onBindViewHolder()方法中重新创建.为什么在这?因为主RecyclerView的适配器正在传递位置X然后调用OnBindViewHolder().然后,后者使用自己的适配器创建一个新的RecyclerView并将其分配给它.我想保留这些观点只是因为它们每次重新充气都很重要.
这可能吗?如果是的话,你能告诉我怎么样吗?
Sou*_*abh 64
用这个:
recyclerView.getRecycledViewPool().setMaxRecycledViews(TYPE_CAROUSEL, 0);
Run Code Online (Sandbox Code Playgroud)
这不会回收viewType的任何视图,TYPE_CAROUSEL但如果此类型的项目数非常高,那么它将显着降低您的性能,甚至可能导致OOME
编辑
在阅读MML13的答案后,我认为它可能适合你.当您在外部RecyclerView中重新绑定该视图时,您担心旋转木马的项目会被重新充气.如果所有这些轮播都是相同的类型,即它们都使用相同的适配器,您可以将适配器保持在RecyclerView的ViewHolder外部,只需交换数据并在重新绑定时调用notifyDataSetChanged()或notifyItemRangeChanged(...)使用此适配器.这将回收所有轮播视图和这些轮播内的所有视图.
Yyy*_*Yyy 28
您还可以在适配器的onBindViewholder()方法中设置以下代码.
holder.setIsRecyclable(false);
Run Code Online (Sandbox Code Playgroud)
我已经从这个链接中参考了
http://aphoe.com/blog/prevent-androids-recyclerview-recycling-views/
小智 9
因为某些视图在不再可见时被销毁,然后在onBindViewHolder()方法中重新创建.
事实并非如此,他们不会再创造,他们只是重新绑定.如果您有位置X的视图(在废料或回收商中)RecyclerView将使用它并重新绑定它.
我想保留这些观点只是因为它们每次重新充气都很重要.
主要RecyclerView为您保留这些.您只需要更改第二个的适配器数据RecyclerView并调用notifyDataSetChanged.还要将第二个RecyclerView适配器存放viewHolder在主机内RecyclerView.
小智 6
在您的活动中设置以下行
recyclerView.getRecycledViewPool().setMaxRecycledViews(1,0);
在 RecyclerViewAdapter 类中设置下面的代码
@Override
public int getItemViewType(int position) {
return 1;
}
Run Code Online (Sandbox Code Playgroud)
小智 6
您可以添加适配器:
@Override
public void onBindViewHolder(final CommentViewHolder viewHolder, final int position) {
viewHolder.setIsRecyclable(false);
}
Run Code Online (Sandbox Code Playgroud)
通知回收者该物品是否可以回收。不可回收的视图setIsRecyclable()在以后设置为true 之前不会再用于其他项目。的呼叫setIsRecyclable()应始终配对(一个呼叫setIsRecyclabe(false)应始终与以后的匹配setIsRecyclable(true))。成对的调用可以嵌套,因为状态在内部是引用计数的。
| 归档时间: |
|
| 查看次数: |
30373 次 |
| 最近记录: |