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

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

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

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

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

但是我想知道ViewHolder是否必须是内部类。 这让我很烦恼。 请不要指教我结合适配器类,他们是完全不同的ViewHolder只是一个特殊的viewType可以出现在任何RecyclerView

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

问候。

Solutions Collecting From Web of "RecyclerView.ViewHolder总是必须是一个内部类吗?"

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

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

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

问题的答案是 – ViewHolder不一定是内部类,而且您的问题是由于在将ViewHolder用作外部类时导致无效的代码实现。

其实, 没有

首先,你需要明白为什么我们需要内部课堂?

我们确实需要内部类,我们希望只有特定的类才具有这种function。就像我们有很多ListenersButton onClick的内部类,还有更多。

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

你可以把这个东西( ViewHolder )做成一个单独的类。但是这样做效率不高,清楚(如果你创build了另外一个类,它会为你的项目增加一个额外的类)和有效的方法。

我一直用它作为内在的。 我理解你的问题,我也处理了一段时间,我认为这个post有答案。 这个答案的家伙也有适配器的问题。

检查它在这里: https : //stackoverflow.com/a/29719632/6634292

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