Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/201.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 我们是否应该使用RecyclerView替换ListView?_Android_Listview_Android Recyclerview - Fatal编程技术网

Android 我们是否应该使用RecyclerView替换ListView?

Android 我们是否应该使用RecyclerView替换ListView?,android,listview,android-recyclerview,Android,Listview,Android Recyclerview,Android文档说: RecyclerView小部件是的一个更高级、更灵活的版本 列表视图。此小部件是用于显示大型数据集的容器 通过保持有限的数量,可以非常有效地滚动 观点的多样性。在收集数据时使用RecyclerView小部件 其元素在运行时根据用户操作或网络发生变化 事件 事实上,如果效率不重要,ListView可以完成上述所有工作,我们在使用RecyclerView替换ListView时发现了许多问题: 没有用于列表项选择的MClickListener() 列表项之间没有分隔符- 没有内

Android文档说:

RecyclerView小部件是的一个更高级、更灵活的版本 列表视图。此小部件是用于显示大型数据集的容器 通过保持有限的数量,可以非常有效地滚动 观点的多样性。在收集数据时使用RecyclerView小部件 其元素在运行时根据用户操作或网络发生变化 事件

事实上,如果效率不重要,
ListView
可以完成上述所有工作,我们在使用
RecyclerView
替换
ListView
时发现了许多问题:

  • 没有用于列表项选择的MClickListener()

  • 列表项之间没有分隔符-

  • 没有内置的重叠选择器,单击列表项时没有视觉反馈-

  • 列表标题的addHeaderView-

  • 也许还有更多的问题

    因此,当我们使用
    RecyclerView
    替换
    ListView
    时,我们必须进行大量额外的编码才能达到与
    ListView
    相同的效果。

    问题:

    • 我们是否值得将
      列表视图
      全部替换为
      回收视图
    • 如果不是,那么在哪种情况下我们最好使用
      RecyclerView
      而不是
      ListView
      ,反之亦然

    1您可以使用界面提供单击侦听器。我也在ListView中使用这种技术。
    2无分隔符:只需在行中添加一个宽度为匹配父视图,高度为1dp的视图,并为其提供背景色
    3只需使用状态列表选择器作为行背景。
    4在ListView中也可以避免添加HeaderView:只需将标题放在视图外部即可


    因此,如果您关心的是效率,那么用RecyclerView替换ListView是一个好主意。

    如果ListView适合您,则没有理由迁移。 如果您正在编写一个新的UI,那么使用RecyclerView可能会更好

    当您需要自定义列表或想要更好的动画时,RecyclerView功能强大。ListView中那些方便的方法给人们带来了很多麻烦,这就是为什么RecyclerView为它们提供了更灵活的解决方案


    迁移所需的主要更改在适配器中。如果您想继续调用notifyDataSetChanged,您将失去大部分动画和绑定的好处。但是,如果您可以将适配器更改为分派详细的通知事件(添加/删除/移动/更新),则可以获得更好的动画和性能。这些事件允许RecyclerView选择正确的动画,还可以帮助它避免不必要的
    onBind
    调用。如果项目视图很复杂,您将获得巨大的好处。此外,今后,RecyclerView将有更多组件。

    使用ListView仍然可以的唯一情况是列表不是动态的或不受网络事件影响。例如:导航

    对于任何其他用途,RecyclerView会使ListView黯然失色。由于RecyclerView只关心回收,因此在ListView中进行紧密耦合的视觉相关操作会更容易,例如更改位置/重新排列、动画(实际上它附带了
    RecyclerView.ItemAnimator
    ),自定义布局


    另外,如果您想使用CardView,我相信这是唯一的选择。

    一个很好的选择是使用BaseAdapter。它支持使用Viewholder模式,我的包含100多行位图和按钮,运行非常平稳。

    直到最近,我还在使用ListView处理非常简单的列表。例如,如果我想显示一个简单的文本选项列表

    我的决定基于“人为因素”,即如果性能无关紧要,那么用更少的代码创建一个简单的ListView会更好。我经常想起大学里的一位教授,他喜欢说:“我的老师伟大的尼克劳斯·沃思,帕斯卡的发明者,曾经说过,如果一个程序有超过50行的代码,它肯定是错的……”

    但说服我停止使用ListView的是,它最近与RelativeLayout一起被移动到Android Studio设计工具中的“遗留”类别

    我认为这是“不赞成”的“软”形式。如果它真的被弃用了,并且所有尽责的开发人员都将其代码迁移到RecyclerView,那么它的破坏性就太大了

    此外,ListView的简介在顶部警告说,RecyclerView是一个更好的选择:“要获得更现代、更灵活、更高性能的列表显示方法,请使用RecyclerView。”

    此外,《ListView指南》仍在讨论游标加载程序,但getSupportCursorLoader()本身在API 28中刚刚被弃用。

    Android Studio最近的增强功能:

    文件->新建->片段->片段(列表)

    这为我们提供了一个充满基本文本的完整的RecylerView。这就消除了我使用ListView的最后一个真正原因,因为现在建立一个基本的RecylerView同样容易


    总之,我根本不打算在新开发中使用ListView,因为将它标记为“遗留”是一步之遥。这些不是我的问题,我有每个问题解决方案的链接您的线程只是第一个问题,这不是我的问题,只要提到,如果您对使用折叠的动作栏感兴趣,您必须使用recyclerview。您应该使用recyclerview,因为它提供了比listview更多的控制。这有点复杂,但如果你能做到这一点,那么你的生活就会变得非常简单,无论你什么时候处理列表之类的事情。更好是好的敌人。你是指从服务器获取一个数据列表,然后存储在手机上的sqlite中,用于列表显示(比如说