RecyclerView.ViewHolder 是否总是必须是一个内部类?

我有两个 s 使用与内部类完全相同的 s。RecyclerView.AdapterRecyclerView.ViewHolder

我想摆脱代码重复,并创建了这些免费的,单独的类,因此现在任何人都可以使用全新的类。ViewHolderRecyclerView.Adapter

但是,我遇到了很多麻烦,例如访问适配器对象的困难。 始终返回 。getAdapterPosition()-1

所以我改变了主意,做了一个由这些适配器扩展的超类,并将ViewHolder放在超类中,以便这些适配器可以从子类使用它。RecyclerView.Adapter

但我想知道是否必须是一个内部类。这让我很生气。请不要建议我组合适配器类,它们是完全不同的,因为它只是一个特殊的,可以出现在任何ViewHolderViewHolderviewTypeRecyclerView

我正在等待你更好的方法,让我感觉更好。

问候。


答案 1

ViewHolder 可以在类外。内部类只是 RecyclerView 所有教程中的一个命题,如果您的 ViewHolder 应该有权访问所有 Adapter 参数(甚至是那些私有参数),那么这是一种更好的方法,但是任何访问或对象关系都可以通过 Adapter 和 ViewHolder 中的访问方法重新创建。

我创建了使用ViewHolder作为外部类的独立项目,请看一下。链接到存储库 - https://github.com/maciejsikora/outsideviewholder

我认为你的问题的另一个原因是,在第一个代码版本中,ViewHolder是一个内部类,可以访问属性,在更改为外部类后,代码应该被重构,结果应该深入检查ViewHolder和Adapator之间的所有关系。

问题的答案是 - ViewHolder 不必是内部类,您的问题是由使用 ViewHolder 作为外部类的无效代码实现引起的。


答案 2

其实不然

首先,您需要了解为什么我们需要内部类?

我们确实需要内部类,我们希望只有特定的类才具有此功能。就像我们有很多内部类一样,onClick等等。ListenersButton

因此,我们使用内部类来使事情变得私密,简短和简单

你可以把这个东西()做成一个单独的类。但这不会是有效的,明确的(如果你做另一个类,它会给你的项目添加一个额外的类),和有效的方式。ViewHolder


推荐