RecyclerView.ViewHolder 是否总是必须是内部 class?
Does RecyclerView.ViewHolder always have to be an inner class?
我有两个 RecyclerView.Adapter
使用与内部 class 完全相同的 RecyclerView.ViewHolder
。
我想摆脱代码重复并使这些 ViewHolder
免费、独立 class 因此全新的 class 现在可以被任何 RecyclerView.Adapter
使用s.
但是我遇到了很多麻烦,例如难以访问适配器对象。 getAdapterPosition()
总是 returns -1
.
所以我改变了主意,做了一个超级 RecyclerView.Adapter
class ,它由那些适配器扩展,并将 ViewHolder 放在超级 class 中,这样那些适配器就可以从子中使用它class.
但我想知道 ViewHolder
是否必须是内部 class。这让我很生气。请不要建议我组合 Adapter classes,它们完全不同,因为 ViewHolder
只是一个特殊的 viewType
,可以出现在任何 RecyclerView
我正在等待你更好的方法让我感觉更好。
此致。
我一直用它作为内在。我理解你的问题,我也处理了一段时间,我认为这个 post 有答案。来自这个答案的人也有适配器问题。
在这里查看:
你的问题很有趣;)
实际上,没有。
首先你需要明白为什么我们需要Inner class?
我们确实需要内部 classes 我们希望只有特定的 class 会有这个 functionality.Like 我们有很多内部 class 很多 Listeners
和 Button
onClick 等等。
所以我们使用内部 class 来 使事情变得私密、简短 。
你可以把这个东西(ViewHolder
)做成一个单独的class.But,这样效率不高,清楚(如果你再做一个class,它会增加一个额外的class 到您的项目),以及有效的方法。
ViewHolder 可以在 class 之外。 Inner class 只是 RecyclerView 的所有教程中的一个命题,如果您的 ViewHolder 应该可以访问所有 Adapter 参数,即使是私有参数,这是一个更好的方法,但是任何访问或对象关系都可以通过 Adapter 中的访问方法重新创建和 ViewHolder。
我创建了使用 ViewHolder 作为外部的独立项目 class,请看一下。 Link 到存储库 - https://github.com/maciejsikora/outsideviewholder.
我认为您的问题的原因还在于,在第一个代码版本中,ViewHolder 是一个内部 class 并且可以访问属性,在更改为外部 class 之后,代码应该被重构,结果应该深入检查 ViewHolder 和 Adapter 之间的所有关系。
问题的答案是 - ViewHolder 不必位于内部 class,您的问题是由于将 ViewHolder 用作外部 class.[=11= 时代码实现无效造成的]
我有两个 RecyclerView.Adapter
使用与内部 class 完全相同的 RecyclerView.ViewHolder
。
我想摆脱代码重复并使这些 ViewHolder
免费、独立 class 因此全新的 class 现在可以被任何 RecyclerView.Adapter
使用s.
但是我遇到了很多麻烦,例如难以访问适配器对象。 getAdapterPosition()
总是 returns -1
.
所以我改变了主意,做了一个超级 RecyclerView.Adapter
class ,它由那些适配器扩展,并将 ViewHolder 放在超级 class 中,这样那些适配器就可以从子中使用它class.
但我想知道 ViewHolder
是否必须是内部 class。这让我很生气。请不要建议我组合 Adapter classes,它们完全不同,因为 ViewHolder
只是一个特殊的 viewType
,可以出现在任何 RecyclerView
我正在等待你更好的方法让我感觉更好。
此致。
我一直用它作为内在。我理解你的问题,我也处理了一段时间,我认为这个 post 有答案。来自这个答案的人也有适配器问题。
在这里查看:
你的问题很有趣;)
实际上,没有。
首先你需要明白为什么我们需要Inner class?
我们确实需要内部 classes 我们希望只有特定的 class 会有这个 functionality.Like 我们有很多内部 class 很多 Listeners
和 Button
onClick 等等。
所以我们使用内部 class 来 使事情变得私密、简短 。
你可以把这个东西(ViewHolder
)做成一个单独的class.But,这样效率不高,清楚(如果你再做一个class,它会增加一个额外的class 到您的项目),以及有效的方法。
ViewHolder 可以在 class 之外。 Inner class 只是 RecyclerView 的所有教程中的一个命题,如果您的 ViewHolder 应该可以访问所有 Adapter 参数,即使是私有参数,这是一个更好的方法,但是任何访问或对象关系都可以通过 Adapter 中的访问方法重新创建和 ViewHolder。
我创建了使用 ViewHolder 作为外部的独立项目 class,请看一下。 Link 到存储库 - https://github.com/maciejsikora/outsideviewholder.
我认为您的问题的原因还在于,在第一个代码版本中,ViewHolder 是一个内部 class 并且可以访问属性,在更改为外部 class 之后,代码应该被重构,结果应该深入检查 ViewHolder 和 Adapter 之间的所有关系。
问题的答案是 - ViewHolder 不必位于内部 class,您的问题是由于将 ViewHolder 用作外部 class.[=11= 时代码实现无效造成的]