android– 我希望我的RecyclerView不回收一些物品

android– 我希望我的RecyclerView不回收一些物品,第1张

概述我正在使用带有异构视图的RecyclerView,asseeninthistutorial.我在RecyclerView里面有一些物品也是RecyclerViews.难以想象?假设我想要复制Play商店的布局:一个具有垂直线性布局的大型RecyclerView,并由许多元素填充:单个应用程序和应用程序轮播.如果要添加的项目是单个应用程序

我正在使用带有异构视图的RecyclerVIEw,as seen in this tutorial.

我在RecyclerVIEw里面有一些物品也是RecyclerVIEws.难以想象?假设我想要复制Play商店的布局:一个具有垂直线性布局的大型RecyclerVIEw,并由许多元素填充:单个应用程序和应用程序轮播.

如果要添加的项目是单个应用程序的布局,则将使用ID 1,我将添加单个项目的布局.
另外,如果我需要添加一个Carousel,那么我将在主RecyclerVIEw中添加一个元素:另一个带有自己的适配器的RecyclerVIEw.

这非常有效.滚动主RecyclerVIEw时除外.为什么?因为某些视图在不再可见时被销毁,然后在onBindVIEwHolder()方法中重新创建.为什么在这?因为主要RecyclerVIEw的适配器正在传递位置X,然后调用OnBindVIEwHolder().然后,后者使用自己的适配器创建一个新的RecyclerVIEw并将其分配给它.我想保留这些观点只是因为它们每次重新充气都很重要.

这可能吗?如果是的话,你能告诉我怎么样吗?

解决方法:

用这个:

recyclerVIEw.getRecycledVIEwPool().setMaxRecycledVIEws(TYPE_CAROUSEL, 0);

这不会回收vIEwType TYPE_CAROUSEL的任何视图,但如果此类型的项目数非常高,那么它将显着降低您的性能,甚至可能导致OOME

编辑

在阅读MML13的答案后,我认为它可能适合您.当您在外部RecyclerVIEw中重新绑定该视图时,您担心旋转木马的项目会被重新充气.如果所有这些轮播都是相同的类型,即它们都使用相同的适配器,您可以将适配器保持在RecyclerVIEw的VIEwHolder外部,只需交换数据并在重新绑定时调用此适配器上的notifyDataSetChanged()或notifyItemRangeChanged(…) .这将回收所有轮播视图和这些轮播内的所有视图.

总结

以上是内存溢出为你收集整理的android – 我希望我的RecyclerView不回收一些物品全部内容,希望文章能够帮你解决android – 我希望我的RecyclerView不回收一些物品所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1102189.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-28
下一篇2022-05-28

发表评论

登录后才能评论

评论列表(0条)

    保存