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 很多 ListenersButton 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= 时代码实现无效造成的]