我可以有两个带有一个 viewHolder 和两个适配器的 recyclerView 吗?

can i have two recyclerView with one viewHolder and two adapters?

嗨,我是 android 的新人,我有一个问题。

  1. 如果我有两个recyclerviews,我应该有多少个viewHolder和adapter?

  2. 我可以有两个带有一个 viewHolder 和两个适配器的 recyclerView,还是每个 recyclerView 有一个适配器和一个 viewHolder 是一种好习惯?

随便你! Adapter 是获取数据并管理在列表中显示数据的东西,ViewHolder 是代表该列表中项目的 UI 组件。 RecyclerView 基本上说“嘿,我需要项目 n”,适配器的工作是获取 ViewHolder 并将其设置为显示项目 n的数据

最简单的组织方式是为每个列表(每个 RecyclerView)创建一个适配器,并创建一个 ViewHolder 来表示该列表的项目。因此,每个列表一组组件,专门为该列表设计。但是如果这两个列表基本相同——使用相同的数据并以相同的方式表示它,并且重用这些东西是有意义的——那么如果你愿意,你可以在两个列表中使用相同的组件

您只需要确保它们 相同,并且您不会试图过度概括并竭尽全力让事情“在多个方面都有效”情况”,当更简单的方法是制造完成特定工作的东西时。虽然这是一般的编程 - 知道什么时候重用东西,知道什么时候“复制”它,这些都是经验带来的。重用东西很好,除非它使事情复杂化并将真正应该独立的东西联系在一起

顺便说一句,如果你有一个适配器,你可能有一个 ViewHolder,因为需要编写适配器以与特定类型的 ViewHolder 一起工作(在 [=18= 上设置文本] 具有特定 ID 等)。您 可以 编写它来处理两个完全不同的 ViewHolder ,但是随后您会遇到复杂的事情 - 只编写一个适用于一种类型的适配器会更容易项目,除非你有充分的理由(比如一个 RecyclerView 包含不止一种类型的项目,需要不同的 ViewHolder 具有不同的布局)

这完全取决于您的业务需求。

基础 -

Recyclerview - UI 部分。

适配器 - 用于使用一些覆盖方法填充回收器视图。

ViewHolder - 这是在您的回收站视图中显示的唯一 UI 项。

场景一-

假设您在两个活动中有一个聊天对话屏幕。这里两个 UI 有相同的用途。所以你必须使用相同的适配器及其 ViewHolder 。

场景二-

您在两个活动中有一个用户列表屏幕。但不同之处在于,您想要制作一个具有无限滚动的,而另一个只有一页数据。现在你可以看到你必须显示相同的 UI 但加载数据的逻辑发生了变化。所以我建议您使用两个具有相同 ViewHolder 的适配器(或它的一些变体)。

对于你的问题-

如果我有两个recyclerviews,我应该有多少个viewHolder和adapter?

根据您的要求,每个 Recyclerview 一次只能有 1 个适配器和一个或多个 ViewHolder。但是,如果您想在 UI 中重用 Recyclerview,您可以交换适配器。但为了安全起见,请使用单个适配器。

我可以有两个带有一个 viewHolder 和两个适配器的 recyclerView,还是每个 recyclerView 有一个适配器和一个 viewHolder 是一种好习惯?

当然有可能。对此没有硬性规定。但是当您尝试在这些之间混合搭配时,您的业务逻辑会变得纠缠不清。

最佳做法是为每个 RecyclerView 使用一个适配器,并且适配器将有其单独的 viewHolder(单个或多个)。但不要重复使用它们,除非您的业务要求需要它。