为什么RecyclerView.OnScrollListener不是接口而是抽象类?

2024-04-07

实现无尽滚动模式RecyclerView我想创建一个像

public class EndlessScrollAdapter<VH extends ViewHolder> 
        extends RecyclerView.Adapter<VH> implements RecyclerView.OnScrollListener {
}

Because EndlessScrollAdapter应该负责数据和滚动事件处理,这是最方便的实现方式。

但是,因为在recyclerview-v7-21.0.3, OnScrollListener像这样声明

/**
 * An OnScrollListener can be set on a RecyclerView to receive messages
 * when a scrolling event has occurred on that RecyclerView.
 *
 * @see RecyclerView#setOnScrollListener(OnScrollListener)
 */
abstract static public class OnScrollListener {
    /**
     * Callback method to be invoked when RecyclerView's scroll state changes.
     *
     * @param recyclerView The RecyclerView whose scroll state has changed.
     * @param newState     The updated scroll state. One of {@link #SCROLL_STATE_IDLE},
     *                     {@link #SCROLL_STATE_DRAGGING} or {@link #SCROLL_STATE_SETTLING}.
     */
    public void onScrollStateChanged(RecyclerView recyclerView, int newState){}

    /**
     * Callback method to be invoked when the RecyclerView has been scrolled. This will be
     * called after the scroll has completed.
     *
     * @param recyclerView The RecyclerView which scrolled.
     * @param dx The amount of horizontal scroll.
     * @param dy The amount of vertical scroll.
     */
    public void onScrolled(RecyclerView recyclerView, int dx, int dy){}
}

我做不到EndlessScrollAdapter实施OnScrollListener.

正如标题所说,有什么充分的理由吗?OnScrollListener成为一个类而不是一个接口?因为我觉得它应该是一个接口。


我有同样的问题,它绝对是按照设计的,正如这个错误报告中所回答的:

https://code.google.com/p/android/issues/detail?id=79283 https://code.google.com/p/android/issues/detail?id=79283

抽象类允许框架添加新方法而不破坏现有的实现。

还可以在这里找到引入它的差异:

https://android.googlesource.com/platform/frameworks/support/+/cef7b49%5E!/ https://android.googlesource.com/platform/frameworks/support/+/cef7b49%5E!/

此更改将 RecyclerView 添加为滚动相关回调的第一个参数。

它还修复了一个错误,即使用预期的滚动调用滚动回调 量而不是实际的滚动量。

我还将其更改为抽象类而不是接口,以便将来 改变更容易。

就我个人而言,我不确定是否同意这一改变,但就这样吧。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么RecyclerView.OnScrollListener不是接口而是抽象类? 的相关文章

  • Android - 保存动态更改布局的状态

    我有一个布局 用户可以在其中添加按钮并将其放置在他们想要的位置 我想允许用户保存他们的布局 以便下次打开应用程序时加载它 有谁知道我是否可以将文件保存到 SD 卡上 或者 我可以使用某种layout getXml 方法并将其放入我的应用程序
  • getItem 与 getItemAtPosition

    有两种方法可以获取列表视图中的选定项目 list getAdapter getItem position list getItemAtPosition position 我的问题是 哪一种是首选的做法 我见过人们同时使用这两种方法 您可以使
  • 使用 Android 前台服务为 MediaPlayer 创建通知

    问题就在这里 我目前正在开发一个应用程序 该应用程序必须提供 A 广播播放器 来自 URL 的 AAC 直播 还有一个播客播放器 来自 URL 的 MP3 流 该应用程序必须能够在后台运行 Android 服务 并通过以下方式向用户公开持续
  • 在自定义对象中创建时粘性服务不会重新启动

    我有一个具有绑定服务的单例对象 我希望它重新启动 当我从启动器启动应用程序时 单例对象将初始化并绑定到这个现有的服务实例 以下是在单例中创建和绑定服务的代码 public class MyState private static MySta
  • 共同的偏好不断消失

    我正在使用共享首选项来存储我的应用程序的登录凭据 除了一个用户之外 一切正常 一段时间后 共享偏好似乎会以某种方式重置或清除 我已针对该用户调整了我的应用程序 使其不再清除他的共享偏好设置 这样我就可以确定这不是我的应用程序的错 但即使在这
  • Android:“dp”到“px”转换?

    我正在读这篇文章 http developer android com guide practices screens support html http developer android com guide practices scre
  • KitKat(及更低版本)设备上的 Android Material Design

    我将在我们学校开发一个 Android 应用程序作为一个项目 我想使用 Google 的新 Material Design 但我知道它仅适用于 Android L 设备 Jack Underwood 最近发布了名为 Today Calend
  • 如何查找 Android 设备中的所有文件并将它们放入列表中?

    我正在寻求帮助来列出 Android 外部存储设备中的所有文件 我想查找所有文件夹 包括主文件夹的子文件夹 有办法吗 我已经做了一个基本的工作 但我仍然没有得到想要的结果 这不起作用 这是我的代码 File files array file
  • 已经使用 AsyncTask doInBackground 但新数据未显示

    我使用 AsyncTask 创建一个聊天室来接收消息 因此它总是检查即将到来的消息并将其显示给客户端 但代码似乎无法按我希望的方式工作 在客户端只显示所有旧数据 新数据不显示 因为当我尝试从服务器发送消息时 新数据没有显示在客户端中 我对这
  • 如何在 sqlite 中将 2 列合并为新列

    我有一个包含 3 列的表 我必须将 2 列中的值按降序排列到一列中 A B C z 1 2 f 5 7 s 9 5 使用此示例 输出会将 B 列和 C 列中的值放入其中 如下所示 A B s 9 f 7 f 5 s 5 z 2 z 1 我当
  • CookieManager.getInstance().removeAllCookie();不删除所有cookie

    我在应用程序的 onCreate 中调用 CookieManager getInstance removeAllCookie 我遇到了一个奇怪的问题 我看到 GET 请求中传递了意外的 cookie 值 事实上 cookie 值是一个非常非
  • 在 Jetpack Compose 中启动动画矢量 Drawable

    我有一个动画矢量可绘制R drawable my anim 我想在 Jetpack Compose 中展示并开始 可绘制对象显示 渲染正确 但动画未启动 这是撰写视图 Composable fun SplashView Surface mo
  • 使用 Matrix.setPolyToPoly 选择位图上具有 4 个点的区域

    我正在 Android 上使用位图 在使用 4 个点选择位图上的区域时遇到问题 并非所有 4 点组都适合我 在某些情况下 结果只是一个空白位图 而不是裁剪后的位图 如图所示 并且 logcat 中没有任何错误 甚至是内存错误 这是我用来进行
  • 如何在不更改手机语言的情况下更改Android应用程序语言?

    我希望用户在应用程序内选择一种语言 选择语言后 我希望字符串使用特定语言 如果我更改手机语言 那么我的应用程序将以设置的语言运行 我无法找到任何在不更改手机语言的情况下设置语言的方法 此外 一旦设置了语言 更改就应该反映出来 有人可以建议一
  • 材质设计图标颜色

    应该是哪种颜色 暗 材质图标 在官方文档上 https www google com design spec style icons html icons system icons https www google com design s
  • Android中webview的截图方法

    我在 webview 中的 html5 canvas 上画了一些线 并尝试使用下面的代码截取 webview 的屏幕截图 WebView webView WebView findViewById R id webview webView s
  • 保护 APK 中的字符串

    我正在使用 Xamarin 的 Mono for Android 开发一个 Android 应用程序 我目前正在努力使用 Google Play API 添加应用内购买功能 为此 我需要从我的应用程序内向 Google 发送公共许可证密钥
  • 在webview android中加载本地html文件

    我正在尝试在 android 的 webview 中加载 html 文件的内容 但是 它给了我 网页不可用错误 如果我尝试使用谷歌或雅虎等网站 它们就会起作用 html文件位于src gt main gt assests gt index
  • 无法运行我的应用程序,要求选择 Android SDK

    今天我已经安装了Android Studio 金丝雀 1 现在我无法运行我的应用程序 将出现以下对话框 我已经通过 文件 gt 项目结构 gt Android SDK 位置 设置了正确的 SDK 位置 期待您的帮助来解决这个问题 警告对话框
  • 如何删除因 Google Fitness API 7.5.0 添加的权限

    将我的 play services fitness api 从 7 0 0 更新到 7 5 0 后 我注意到当我将新版本上传到 PlayStore 时 它 告诉我正在添加一个新权限和 2 个新功能 我没有这样做 有没有搞错 在做了一些研究来

随机推荐

  • Quartz属性文件传入环境变量

    我正在尝试将环境变量添加到我的石英属性文件中 但它没有正确加载 这是我的quartz properties org quartz scheduler instanceName scheduler org quartz scheduler i
  • 使用 Mongoose 更新字段子集

    当仅指定 MongoDB 文档的部分字段时 如何使用 Mongoose 更新该文档 即更新指定字段 但保留任何其他现有字段不变 在以下路由处理程序中 用户可以选择要提供的字段 以下作品有效 但使用if感觉报表不是特别大 有更优雅的解决方案吗
  • AWK:打印一个字段中具有最大值的所有行每个其他字段,包括具有最大值和多个列的相同行

    我很感激许多贡献者迅速提供了许多解决方案 AWK 打印一个字段中具有最大值的所有行每个其他字段 包括具有最大值的相同行 https stackoverflow com questions 75392860 awk print all row
  • 在 Alpine 中安装旧版本的软件包

    最近 9 月 5 日 Alpine Linux 软件包存储库已更新为 postgresql client 12 4 我在 Dockerfile 中引用版本 12 3 apk add postgresql client 12 3 现在那个版本
  • 我什么时候应该担心对齐问题?

    我最近了解了一些关于对齐的知识 但我不确定在哪些情况下它会成为问题 有两种情况我想知道 第一个是使用数组时 struct Foo char data 3 size is 3 my arch is 64 bit 8 bytes Foo arr
  • 将 .sort 与 PyMongo 一起使用

    使用 PyMongo 当我尝试检索按 数字 和 日期 字段排序的对象时 如下所示 db test find number gt 1 sort number 1 date 1 我收到此错误 TypeError if no direction
  • 内核模块和SCHED_RR线程的优先级

    我有一个嵌入式 Linux 平台 Beagleboard 运行 Angstrom Linux 连接了两个设备 通过 USB 连接的激光测距仪 Hokuyo UTM 30 通过 SPI 连接的定制外部板 我们编写了一个Linux内核模块 负责
  • python中逆ERF函数的命令[关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 在Python中计算函数的逆误差函数 erf 的命令是什么 需要导入哪个模块 For the inverse误差函数 scipy speci
  • Highcharts / Highstock 阶梯线没有垂直“过渡”线?

    是否可以省略 方波 线中的垂直线 我想你可以称之为水平线 这是一个例子 实现这种外观的最简单方法是使用带有自定义 线 符号的散点图 define a custom line symbol Highcharts SVGRenderer pro
  • 免费的非消耗性应用内购买,包含 Apple 服务器上托管的内容

    包含 Apple 服务器上托管内容的非消耗性应用内购买是否可以免费 我在文档中找不到任何有关此内容的信息 并且由于您可以在 iTunes connect 中将应用内购买设置为免费 所以我认为这是可能的 我在 iTunes connect 上
  • 创建反向剪辑路径 - CSS 或 SVG

    我正在尝试创建本质上与 CSS 剪辑路径相反的内容 使用 Clip path 时 图像或 div 会被剪切 以便仅保留您指定的形状 而背景的其余部分将被有效删除 我希望这样 如果我剪辑一个形状 它基本上会在最上层打一个洞并删除形状 而不是背
  • EntityFramework Core - 复制实体并将其放回数据库

    是否有最佳实践来复制实体 根据用户输入对其进行一些更改 然后将其重新插入数据库 其他一些 Stackoverflow 线程提到 即使数据库中存在相同的主键 EF 也会为您处理插入新对象 但我不太确定 EF Core 是如何处理它的 每当我尝
  • 如何在 Plotly 中增加飞机的大小

    Got the 以下代码 https github com tiago peres immersion blob master platforms v2 ipynb import pandas as pd import plotly gra
  • 强制WKWebView显示移动版本

    我试图强制 WKWebView 显示移动版本 我在不同的应用程序版本中得到不一致的结果 但是 Safari 总是正确播种移动设备 我尝试设置 userAgent 似乎没有任何影响视图 实际上 我发现正确的解决方案是在启动应用程序时清除缓存
  • PHP正则表达式的逻辑运算符AND

    我想在正则表达式中使用一种逻辑运算符 AND 我试过这个 exp1 exp2 但在 PHP 中 不起作用 需要用 PHP 语言编写我的程序 还有其他方法吗 如果所有条件以任意顺序存在 则表达式必须匹配 我不想把每个排列都写成 exp1 ex
  • 如何在 jQuery 中创建链式延迟动画序列?

    考虑拥有以下对象 div span This is div1 span div div span This is div2 span div div span This is div3 span div div span This is d
  • 如何在 v-select 或 v-combobox 上有“全选”选项?

    我们如何有一个全选选项来选择一个中的所有内容v select or a v combobox Vuetify 没有Select all选项v select 但是 您可以使用按钮和方法自己完成 像这样 JS methods selectAll
  • 将 STDIN 拆分为多个文件(如果可能的话压缩它们)

    我有一个程序 gawk 将数据流输出到它的STDOUT 处理的数据实际上有 10 GB 我不想将其保留在单个文件中 而是将其分成多个块 并可能在保存之前对每个文件应用一些额外的处理 如压缩 我的数据是一系列记录 我不想拆分将记录减半 每条记
  • 查找最小值之前的每列值的最大值

    考虑数组a a np array 5 4 4 5 2 2 6 1 3 7 我可以找到最小值在哪里 a argmin 0 array 2 3 如何找到索引 2 之前第 0 列值的最大值 第 1 列和索引 3 也是如此 更重要的是 它们在哪里
  • 为什么RecyclerView.OnScrollListener不是接口而是抽象类?

    实现无尽滚动模式RecyclerView我想创建一个像 public class EndlessScrollAdapter