RecyclerView.ViewHolder总是必须是内部类吗?

Ege*_*tçu 11 java android android-viewholder android-recyclerview

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

我想摆脱代码重复,并使这些ViewHolder免费,独立的类,所以现在全新的类可以被任何RecyclerView.Adapters使用.

但是,我遇到了许多麻烦,例如访问适配器对象的困难.getAdapterPosition()总是回来-1.

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

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

我在等待你让我感觉更好的更好的方法.

问候.

Mac*_*ora 6

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

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

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

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


Meh*_*lik 5

实际上,没有

首先你需要明白为什么我们需要内部类?

我们确实需要内部类,我们希望只有特定的类才有这个功能。就像我们有很多内部类,很多ListenersButtononClick 等等。

所以我们使用内部类来使事情变得私有、简短和简单

你可以把这个东西(ViewHolder)变成一个单独的类。但这不会是有效的、明确的(如果你创建另一个类,它会为你的项目添加一个额外的类),也是有效的方法。