Android RecyclerView与ListView

Android RecyclerView与ListView,android,listview,android-recyclerview,Android,Listview,Android Recyclerview,来自android开发者(): RecyclerView小部件是的一个更高级、更灵活的版本 列表视图 好的,听起来很酷,但是当我看到这个示例图片时,我真的很困惑这两者之间的区别 上面的图片可以通过使用自定义适配器ListView轻松创建 那么,在什么情况下应该使用RecyclerView 要使列表视图具有良好的性能,您需要实现holder模式,这很容易出错,尤其是当您想用几种不同类型的视图填充列表时 RecyclerView将此图案烘焙,使其更难弄乱。它也更灵活,更容易处理不同的布局,而不是像

来自android开发者():

RecyclerView小部件是的一个更高级、更灵活的版本 列表视图

好的,听起来很酷,但是当我看到这个示例图片时,我真的很困惑这两者之间的区别

上面的图片可以通过使用自定义适配器
ListView
轻松创建


那么,在什么情况下应该使用
RecyclerView

要使列表视图具有良好的性能,您需要实现holder模式,这很容易出错,尤其是当您想用几种不同类型的视图填充列表时


RecyclerView将此图案烘焙,使其更难弄乱。它也更灵活,更容易处理不同的布局,而不是像网格一样的直线布局。

RecyclerView
是作为
ListView
的改进而创建的,因此可以使用
ListView
控件创建附加列表,但使用
RecyclerView
更容易:

  • 在上/下滚动时重用单元格-这可以通过在
    列表视图
    适配器中实现视图保持器实现,但这是可选的,而在
    循环视图
    中,这是写入适配器的默认方式

  • 将列表与其容器解耦——因此,通过设置
    LayoutManager
    ,您可以在运行时轻松地将列表项放入不同的容器(linearLayout、gridLayout)

  • 例如:

  • 为常用列表动作设置动画-动画被解耦并委托给
    项目动画制作者
    还有更多关于回收视图的信息,但我认为这些是主要的

    因此,总而言之,
    RecyclerView
    是处理“列表数据”的一个更灵活的控件,它遵循关注点的委托模式,只为自己留下一个任务——回收项目

    RecyclerView
    是一个新的视图组,准备呈现任何 以类似的方式创建基于适配器的视图。这是最好的 ListView和GridView的后续版本,可以在
    最新的support-v7版本
    回收视图
    已经开发完成 考虑到可扩展性,因此可以创建任何类型的 布局你可以想到,但不是没有一点痛苦的屁股 剂量

    答案取自

    RecyclerView
    确实是一个比
    ListView
    更强大的视图。
    有关更多详细信息,您可以访问。

    ListView
    RecyclerView
    的前身。有许多事情不是做得不好,就是做得不好。如果您要收集
    列表视图的缺点
    ,并通过将问题抽象到不同的域来解决问题,那么您最终会得到类似于recycler视图的东西。以下是ListView的主要问题点:

    • 没有对相同的项目类型强制执行
      视图
      重用(查看
      列表视图
      中使用的一个适配器,如果您研究getView方法,您将看到没有任何东西阻止程序员为每一行创建新视图,即使通过
      convertView
      变量传入一行)

    • 没有阻止昂贵的
      findViewById
      使用(即使您如上所述循环使用视图,开发人员也可以调用
      findViewById
      来更新子视图的显示内容。
      listview
      中的
      ViewHolder
      模式的主要目的是缓存
      findViewById
      调用。但是,这只有在您知道的情况下才可用。)因为它根本不是平台的一部分)

    • 仅支持行显示视图的垂直滚动(Recycler视图不关心视图的放置位置和移动方式,它被抽象为一个
      布局管理器
      。因此,Recycler可以支持如上所示的传统
      列表视图
      ,以及类似
      GridView
      的东西,但它不仅限于此,它还可以做更多的事情,但您必须进行编程脚部工作,使之发生)

    • 添加/删除的动画不是一个考虑过的用例。这完全取决于您如何解决(比较RecyclerView.Adapter classes notify*method Offices和ListView,了解它们)

    简而言之,
    RecyclerView
    是对
    列表视图的一种更灵活的选择,尽管您可能需要进行更多的编码。

    主要优势:

    默认情况下,
    ListView
    中的
    ViewHolder
    不可用。我们将在
    getView()中显式创建。
    
    RecyclerView
    内置了
    Viewholder

    在我看来
    RecyclerView
    是为了解决ListView中使用的回收模式的问题,因为它使开发人员的生活更加困难。 所有其他你能处理的或多或少。 例如,我对
    ListView
    GridView
    使用了相同的适配器,但在这两个视图中,
    getView
    getItemCount
    getTypeCount
    都是相同的。 如果带有
    ListAdapter
    ListView
    或带有网格适配器的
    GridView
    已经在为您工作,则不需要使用
    RecyclerView

    如果您在列表视图中正确地实现了
    ViewHolder
    模式,那么与
    RecycleView
    相比,您不会看到任何大的改进。我认为它们的主要和最大区别在于
    ListView
    在创建或放置项目时查找项目的位置,而另一方面
    RecycleView
    查找项目的类型。如果使用
    mRecyclerView = (RecyclerView) findViewById(R.id.my_recycler_view);
    mRecyclerView.setLayoutManager(new LinearLayoutManager(this));
    //or
    mRecyclerView.setLayoutManager(new GridLayoutManager(this, 2));
    
     compile 'com.android.support:recyclerview-v7:27.0.0'