gpt4 book ai didi

android - 当在另一个 RecyclerView(外部)中使用时,何时从内部 RecyclerView 中清除监听器

转载 作者:行者123 更新时间:2023-11-29 19:26:17 25 4
gpt4 key购买 nike

我在另一个 RecyclerView(垂直布局)中使用 RecyclerView(水平布局)。一切正常。现在我想将 RecyclerView.OnScrollListener 监听器添加到内部 RecyclerView

我在适配器回调的 onViewAttachedToWindow 上向内部 RecyclerView 添加一个监听器,并在 onViewDetachedFromWindow 上清除它。它工作正常。但是如果我从 fragment 返回,我不会得到任何 onViewDetachedFromWindow 回调,因此监听器保持添加到内部 RecyclerView

现在我的问题是:

  • fragment 的 onDestroyView 是否会清除那些内部 RecyclerView 中的所有监听器?
  • 由于我是在外部 RecyclerViewViewHolder 中创建监听器的实例,所以当它的 Fragment 被销毁时它会自动销毁吗?

如果以上都不会发生,我应该如何清除这些监听器,因为这可能会导致内存泄漏,因为监听器持有 RecyclerView 的引用?

最佳答案

  • Will fragment's onDestroyView result in clearing out all the listenersfrom those inner RecyclerViews?

  • Since I am creating the instance of the listener inside the outer RecyclerView's ViewHolder, so will it get automatically destroyed when its Fragment is destroyed?

我认为不会,相反这可能会导致内存泄漏。

onViewDetachedFromWindow 没有被调用的原因是 ViewHolder 没有从它的父级中移除。

我认为最好将监听器的所有权移动到 View 的所有者 (Activity/Fragment) 而不是外部 RecyclerView。但是,如果您仍想像当前实现一样保留所有权,您可以尝试在 LinearLayoutManager 中调用 setRecycleChildrenOnDetach(true) 来制作 LinearLayoutManagerRecyclerView 分离时删除所有 View 。

关于android - 当在另一个 RecyclerView(外部)中使用时,何时从内部 RecyclerView 中清除监听器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41341295/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com