- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
将 RecyclerView.OnScrollListener
设为抽象类有什么好处?现在你实际上必须创建一个单独的类,而不是简单地在 Fragment
/Activity
...
这个问题在here之前被问过但答案只是引用了 Google,它似乎并没有真正回答 什么 实际有什么好处。谷歌表示:
Abstract classes allow frameworks to add new methods without breaking existing implementations.
但这一定是真的吗?向抽象类添加更多方法也会破坏现有的实现,因为如果不实现,那么扩展它的类也必须是抽象的……所以这与向接口(interface)添加方法是同样的问题。
他们更改时的差异 here还说
I also changed it to be an abstract class instead of an interface to make future changes easier.
但我还是不明白这有什么意义。有谁了解在这种情况下提供的这种变化的好处?如果真的更好,为什么所有其他监听器都实现为接口(interface)而不是抽象类?
编辑:注意类中也没有任何具体实现,所以我看不出在这里使用抽象类与接口(interface)相比没有内在的好处
最佳答案
创建一个没有方法实现的空白抽象类有几个优点。
将其抽象化的第一个原因是您无法创建对象本身。你总是必须有一个扩展它的类,这意味着你不能真的不小心创建一个。 (尽管您总是可以直接使用 new RecyclerView.OnScrollListener(){}
,所以在这种情况下这可能不是优势)。
如果有很多方法,但你只需要实现一个,你只需要重写一个方法,而不是重写所有方法并留空。通常这是通过拥有一个接口(interface)然后拥有一个实现该接口(interface)的抽象类来完成的,这样您就可以挑选适合您的版本。这次他们显然选择不这样做。
他们在您的问题中提到的最后一个优势是,如果开发人员添加方法,他们将不会破坏现有代码。 RecyclerView 目前仍在开发中,它是支持库的一部分,这意味着它不是官方 Android 版本的一部分。 OnScrollListener()
目前有两个方法,onScrollChanged()
和onScrolled()
。如果它是一个接口(interface),您将被迫重写这两种方法才能进行编译。现在,六个月后,他们决定添加更多功能,例如 onScrolling()
。当您更新支持库时,您的代码突然无法编译。您必须遍历每个使用 onScrollListener()
的文件并添加这个您一开始甚至没有使用的新方法。保持类抽象
意味着他们可以随意添加方法,并且现有代码不会停止编译。
唯一真正的缺点是您不能像添加 OnClickListener
那样将其添加到 Activity
或 Fragment
中,因此您必须将其设为内部类或匿名类。
关于java - RecyclerView的OnScrollListener是抽象类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30623127/
我在 拉动刷新布局 中有一个 recyclerView。我添加了一个 onScrollListener,通过将 delta Y (dy) 添加/减去一个名为 totalScrolled 的变量来跟踪总
我有一个问题。我的 onScrollListener 不起作用,而 onScrollListener 之后的 onItemClickListener 工作正常。这是我的代码: public View
向相反方向滚动不起作用。 我明白我错了只是通过Presenter重新更新View中的数据,并且必须它们都可用RecyclerView 当加载下一部分数据时,RecyclerView没有时间显示最后一个
学习如何使用 OnScrollListener 并且我想做一个方法来检测每次当用户在 ListView 中向上或向下滚动时新的列表项是可见的,如果用户向下滚动我想做一个计数器增量1 对于进入屏幕的每个
我有chrisbanes PullToRefresh lib在我的项目中工作。现在我需要拦截滚动事件来添加一些逻辑,似乎库准备设置onScrollListener,我尝试添加一个 myList.set
我有 gridview,我需要做两件事: 当我向下滚动时,我想找到最后一个可见位置,例如 int index = GridView.getLastVisiblePosition(); 当我向上滚动时,
我在 json 中有大约 32 条记录,我正在使用 RecyclerView 来显示它们并且我已经实现了 OnScrollListener(...) 问题 我启动了一个 Activity ,我获取了所
似乎有很多关于如何向上滚动以获得更多帖子的帖子,我之前已经发布了一个问题:Adding items to Endless Scroll RecyclerView with ProgressBar at
我已经使用 LazyAdapter 创建了一个 ListView 。 当我滚动到列表底部时,新数据会出现,但它会清除所有旧数据。 如何将新数据附加到旧数据下方? 这是我的主要 Activity 代码
请原谅我的英语,我是法国人...... 那么,我有一个关于我的 Android 应用程序的问题。我必须将 GridView 集成为 Pinterest 样式。我找到了这个库:交错 GridView (
我需要 2 个 listView 的同步滚动(垂直和水平) 我尝试了几个用于水平 ListView 的库,但没有库实现 OnScrollListener() https://github.com/Me
我在 ListFragment 中实现了 OnScrollListener 接口(interface),我想在列表的最后一个元素可见时更改文本,但它不起作用。我没有找到类似问题的示例(ListFrag
我从服务器获得 500 条记录..我想在 ListView 中显示 10 个项目,当 ListView 结束时我需要加载另外 10 个,依此类推..我在网上看到很多例子,但我无法解决请帮助我。 这是我
我想在我的应用程序中创建一个无限滚动的 RecyclerView。它使用 Web 服务并在屏幕上显示一些 CardView 项目。这是我到目前为止的简化代码,没有包含 RecyclerView 创建等
我为 RecyclerView 实现了一个 OnScrollListener,如下所示: new RecyclerView.OnScrollListener() { @Override
我在函数中加载 RecyclerView 和 ScrollListener 这是在其中设置 ScrollListener 的代码(我删除了该问题不必要的所有内容): recyclerViewM
根据以下文档https://developer.android.com/reference/android/support/v7/widget/RecyclerView.OnScrollListene
我见过一些使用 OnScrollListener 的 ListView 动态增长实现。 我想知道,有没有更优雅的解决方案?如果 Adapter 说有更多项目可用,ListView 本身不会从 Adap
我有一个 FragmentPagerAdapter 创建它的子页面(它们是 ListFragments),如下所示: @Override public Fragment getItem(int pos
我有一个带有 OnScrollListener 和 OnItemClickListener 的 ListView。当我点击一个项目时,OnScrollListener 和 OnItemClickLis
我是一名优秀的程序员,十分优秀!