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

时间:2016-09-06 10:37:42

标签: java android android-recyclerview android-viewholder

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

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

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

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

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

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

问候。

3 个答案:

答案 0 :(得分:6)

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

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

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

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

答案 1 :(得分:4)

实际上,

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

我们确实需要内部类,我们希望只有特定的类具有此功能。就像许多ListenersButton onClick以及更多内容类一样。

所以我们使用内部类来使事物变得私密,简短和简单

你可以把这个东西(ViewHolder)作为一个单独的类。但是这样做不会有效,清楚(如果你创建另一个类,它将为你的项目添加一个额外的类),并且是有效的方法。

答案 2 :(得分:0)

我一直用它作为内心。我理解你的问题,我也处理了一段时间,我认为这篇文章有答案。这个答案的人也有适配器问题。

在此处查看: https://stackoverflow.com/a/29719632/6634292

你的问题是一个有趣的问题;)