在 NavigationDrawer 中使用 ListView 或 RecyclerView?

Use ListView or RecyclerView in NavigationDrawer?

有点迷茫在DrawerLayout中是用RecyclerView还是ListView
我阅读了 a tutorial,其中解释了如何使用 RecyclerView 创建 NavigationDrawer。
根据google:RecyclerView 是
1) 一个用于显示大型数据集的容器,可以通过维护有限数量的视图来非常有效地滚动。
2) 在内部使用布局管理器。布局管理器将项目视图定位在 RecyclerView 中,并确定何时重用用户不再可见的项目视图。为了重用(或回收)视图,布局管理器可能会要求适配器用数据集中的不同元素替换视图的内容。

因为 Navigation Drawer 中有一个非常小的数据集(header + 一个短列表)并且所有项目仍然对用户可见,我无法从 1 中的回收视图 "features" 中受益) & 2).
即使 Google 使用 ListView in NavigationDrawer.
我想我可以使用 ListView.addHeader() 在 DrawerLayout 中为 header 创建一个特殊视图。
所以我的问题是在 DrawerLayout 中我是否应该更喜欢 RecyclerView 而不是 ListView?

你的解释很好。现在回答你的问题,如果你打算在未来的导航抽屉中使用可扩展列表项,你需要准备好实现可扩展的回收视图(默认情况下不存在)如果你现在使用 RecyclerView .所以在那种情况下 ExpandableListView 将是一个更容易实施的解决方案。但是,如果您不需要抽屉内的任何可扩展项目功能,那么如果您使用的是大型数据集,那么使用 RecyclerView 会是更好的方法。正如您所说,您的数据集很小,我认为如果您使用 ListViewRecyclerView 不会产生太大影响。仍然 RecyclerView 更灵活,为什么不只使用 RecyclerView

根据您的要求,我建议导入 android design support library,这样您就可以使用 NavigationView,这样可以通过提供导航抽屉所需的框架以及膨胀的能力来简化操作通过菜单资源导航项目。

当我为我的应用开发 Material 设计导航抽屉时,同样的问题困扰着我。

甚至您也可以看到 class RecyclerView 的概述,其中定义了

A flexible view for providing a limited window into a large data set.

我们的导航抽屉有固定数量的项目。

因此,您可能会将 public void setHasFixedSize (boolean hasFixedSize) 设置为 true。这将使它几乎成为一个 ListView。

我的抽屉里用的是ListView,你也应该用ListView。

使用导航抽屉非常复杂,Google想出了一个更好更简单的方法来实现抽屉 NavigationView, and your list should now be a "menu", that you can define in a separate xml file, no need for Adapters anymore. For more info on how to implement it check the official android blog here