RecyclerView Adapter 中的静态和非静态视图持有者有什么区别?

What difference between static and non static viewholder in RecyclerView Adapter?

这种方法有什么优点(在我的 class MyAdapter 中使用静态嵌套 class 扩展 RecyclerView.Adapter):

static class MyVH extends RecyclerView.ViewHolder {...}

这种方法(使用内部成员 class):

  class MyVH extends RecyclerView.ViewHolder {...}

或者它不影响性能并且两种方法都可以使用?

使用 static 意味着您可以在其他适配器中重复使用 MyVh。如果您确定在那个适配器中只需要 MyVh,那么您应该使它成为非静态的。

如果您将在其他适配器中需要它,最好将它完全创建为单独的 class,而不是嵌套的 class.

静态与非静态对性能应该没有影响!

与其说是 Android 问题,不如说是 java 问题。如果您将它们的实例从 class 中取出,建议对内部 classes 使用 static 以避免内存泄漏。您可以查看 this awesome post,它解释了内部 classes 上的内存泄漏。

基本上是 nyx 所说的:

  • 如果将视图持有者声明为静态的,则可以在其他适配器中重用它。无论如何,我不建议这样做,创建一个新的分隔 class 并从多个地方使用它,它确实更有意义。一个 class 用于一个目的。
  • 在视图持有者的情况下,此 classes 将仅在适配器内部使用,它们的实例不应根据定义进入片段或 activity 或其他地方。这意味着在视图持有者的情况下,静态或非静态是相同的。

回答你的性能问题,你可以看看this答案。静态的会比另一个占用更少的内存,但同样,我们正在谈论将回收实例的回收器,因此内存影响不是问题。

如果您想在多个地方使用一个视图,那么建议创建单独的 classes。否则,如果您只想在一个地方使用 viewholder,则创建一个 non-static 嵌套 viewholder。静态视图持有者没有任何意义

在大多数地方,我使用嵌套的viewholder class