FirebaseRecyclerPagingAdapter - 按日期排序列表

2024-03-04

在我的应用程序中,我想显示保存在实时数据库中的新闻列表。每个新闻项目都有一个以毫秒为单位的时间戳,以指示新闻的日期。我想首先使用 FirebaseRecyclerPagingAdapter 在 RecyclerView 上显示最新新闻。这个怎么做?

    val baseQuery: Query = FirebaseDatabase.getInstance().reference.child("news")

    val config = PagedList.Config.Builder()
            .setEnablePlaceholders(false)
            .setPrefetchDistance(2)
            .setPageSize(3)
            .build()

   
    val options: DatabasePagingOptions<News> = DatabasePagingOptions.Builder<News>()
            .setLifecycleOwner(this)
            .setQuery(baseQuery, config, News::class.java)
            .build()


    val adapter: FirebaseRecyclerPagingAdapter<News, ViewHolder> = object : FirebaseRecyclerPagingAdapter<News, ViewHolder>(options) {
        override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
            val item = LayoutInflater.from(parent.context).inflate(R.layout.item_news_1, parent, false)
            return ViewHolder(item)
        }

        override fun onBindViewHolder(viewHolder: ViewHolder, position: Int, model: News) {
            viewHolder.bind(model)
        }

        override fun onLoadingStateChanged(state: LoadingState) {

        }
    }

数据库:

"news" : {
      "-MXJ0Fbmvewl3zZ6-Ugn" : {
        "timestamp" : 1617108780000,
        "description" : "A Red Bull tem a expectativa de chegar ainda melhor ao GP da Emilia Romagna de Fórmula 1, disputado no próximo dia 18 de abril, em Ímola. Após ver o holandês Max Verstappen ser batido pela Mercedes do britânico Lewis Hamilton no GP do Bahrein, o time de energéticos pretende dar um 'salto' a fim de garantir a vitória na segunda etapa da temporada 2021 da categoria máxima do ...Continue lendo",
        "id" : "-MXJ0Fbmvewl3zZ6-Ugn",
        "thumb" : "https://cdn-1.motorsport.com/images/amp/YpNW51X0/s6/formula-1-bahrain-gp-2021-max--2.jpg",
        "title" : "F1: Red Bull deve estar ainda melhor na etapa de Ímola; saiba mais",
        "url" : "http://motorsport.uol.com.br/f1/news/f1-red-bull-deve-estar-ainda-melhor-em-imola-entenda-os-detalhes/5991023/?utm_source=RSS&utm_medium=referral&utm_campaign=RSS-ALL&utm_term=News&utm_content=br"
      },
      "-MXJ0LxzjUjfGFDvamKE" : {
        "timestamp" : 1617118680000,
        "description" : "As mudanças nas regras da Fórmula 1 para reduzir o downforce nos carros provaram ser uma grande dor de cabeça para as equipes no inverno europeu - e se tornaram um grande ponto de discussão no Bahrein no último final de semana. As mudanças no assoalho, dutos de freio e difusor visavam originalmente reduzir o downforce em 10%, embora as indicações sugiram que as escuderias já ...Continue lendo",
        "id" : "-MXJ0LxzjUjfGFDvamKE",
        "thumb" : "https://cdn-1.motorsport.com/images/amp/YBeqJen2/s6/lance-stroll-aston-martin-amr2.jpg",
        "title" : "Análise técnica: entenda como as equipes de F1 responderam ao desafio do assoalho de 2021",
        "url" : "http://motorsport.uol.com.br/f1/news/analise-tecnica-entenda-como-as-equipes-de-f1-responderam-ao-desafio-do-assoalho-de-2021/5992503/?utm_source=RSS&utm_medium=referral&utm_campaign=RSS-ALL&utm_term=News&utm_content=br"
      },
    }

您可以使用查询来按项目排序timestamp value

val baseQuery: Query = FirebaseDatabase.getInstance().reference.child("news")
val orderedQuery: Query = baseQuery.orderByChild("timestamp")

这将为您提供按升序排列的项目,因此您必须在应用程序代码中反转它们。

如果您不想这样做,请考虑在数据中存储反转的时间戳值:

"news" : {
  "-MXJ0Fbmvewl3zZ6-Ugn" : {
    "timestamp" : 1617108780000,
    "inverted_timestamp" : -1617108780000,
    "description" : "A Red Bull tem a ......Continue lendo",
    "id" : "-MXJ0Fbmvewl3zZ6-Ugn",
    "thumb" : "https://cdn-1.motorsport.com/images/amp/YpNW51X0/s6/formula-1-bahrain-gp-2021-max--2.jpg",
    "title" : "F1: Red Bull deve estar ainda melhor na etapa de Ímola; saiba mais",
    "url" : "http://motorsport.uol.com.br/f1/news/f1-red-bull-deve-estar-ainda-melhor-em-imola-entenda-os-detalhes/5991023/?utm_source=RSS&utm_medium=referral&utm_campaign=RSS-ALL&utm_term=News&utm_content=br"
  },
  "-MXJ0LxzjUjfGFDvamKE" : {
    "timestamp" : 1617118680000,
    "inverted_timestamp" : -1617118680000,
    "description" : "As mudanças nas ...Continue lendo",
    "id" : "-MXJ0LxzjUjfGFDvamKE",
    "thumb" : "https://cdn-1.motorsport.com/images/amp/YBeqJen2/s6/lance-stroll-aston-martin-amr2.jpg",
    "title" : "Análise técnica: entenda como as equipes de F1 responderam ao desafio do assoalho de 2021",
    "url" : "http://motorsport.uol.com.br/f1/news/analise-tecnica-entenda-como-as-equipes-de-f1-responderam-ao-desafio-do-assoalho-de-2021/5992503/?utm_source=RSS&utm_medium=referral&utm_campaign=RSS-ALL&utm_term=News&utm_content=br"
  },
}

通过上述数据结构,您可以使用以下命令按降序排列它们:

val orderedQuery: Query = baseQuery.orderByChild("inverted_timestamp")

然后您可以通过orderedQuery到适配器,根据降序时间戳查看项目。

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

FirebaseRecyclerPagingAdapter - 按日期排序列表 的相关文章

  • 关于 inflater.inflate Android 文档的困惑

    我正在研究此链接中的片段 http developer android com guide components fragments html http developer android com guide components frag
  • 从存储访问框架 UI 获取文件夹后保存图像

    我设置了一个首选项 让用户使用存储访问框架为我的应用程序选择保存文件夹 获取uri后onActivityResult我将其保存到SharedPreferences作为字符串并在要保存时保存图像 我正在使用此方法成功保存图像 public v
  • 在 Android 上使用 MediaPlayer 流式传输经过身份验证的视频

    我正在尝试从具有基本身份验证的 SharePoint 服务器 URL 流式传输和播放视频 用户名密码 在我的 Android 设备中browser Media Player VideoView但我得到了 错误 sorry this vide
  • Android:创建具有关系的 SQLite 数据库

    我正在尝试创建一个需要具有一对多关系的两个表 SQLite 数据库的应用程序 基本上 第一个表将允许用户创建一名员工 当他们点击该员工时 他们将进入第二个活动 该活动将允许用户为该员工添加多个电话号码 这些电话号码存储在第二个表中 我真的不
  • com.android.ddmlib.AdbCommandRejectedException:设备离线(即使设备已连接)

    将 Android Studio 更新到 2 1 2 后 当我进行更改时 我多次收到以下错误 com android ddmlib AdbCommandRejectedException 设备离线 安装 APK 时出错 问题是设备从未连接且
  • 自定义视图的Ondraw无限循环android

    我的自定义视图的 OnDraw 函数被无限调用并且正在循环 可能的原因是什么 这是我的自定义视图 public class Balls extends View private static final String TAG BallsVi
  • 输入连接-如何删除选定的文本?

    我为 Android 制作了一个自定义键盘 当我按下键盘的退格按钮时 我使用 getCurrentInputConnection deleteSurroundingText 1 0 从输入字段中删除一个字母 但是 当我选择一些文本然后按退格
  • 动态选取框文本

    是否可以将列表视图的 java 编码中的文本添加到 Android 中的选取框滚动中 如果可以 请告诉我如何做 如果需要 我将发布使用的代码 这是列表视图使用的 XML 如下
  • Android 中的垂直和水平滚动视图

    我真的很累了寻找垂直和水平滚动视图的解决方案 我读到框架中没有任何视图 布局实现此功能 但我需要这样的东西 我需要在其他布局中定义一个布局 子布局必须实现垂直 水平滚动才能移动 最初实现了一个逐像素移动布局的代码 但我认为这不是正确的方法
  • Android系统每个应用程序的通知限制

    这可能偏离主题 但我找不到任何相关内容 Android应用程序可以显示的通知数量有限制吗 我在收到 100 条通知后遇到问题 没有文件明确说明这一点 注意 显示 100 条通知并不是一个好主意 但由于某些原因这是必需的 In API23 包
  • 如何在警报对话框中为图像按钮设置 onclick 侦听器

    我有一个带有 ImageButton 的布局 该布局在 AlertDialog 中膨胀 我应该在哪里 如何设置 onClick 侦听器 这是我尝试使用的代码 ImageButton ib ImageButton findViewById R
  • 在哪里可以获得用于导入 libcore.io 的 JAR?

    我想处理一个GaiException在我的应用程序中 调试器告诉我 它位于 libcore io 包中 但导入它会产生错误 我想我需要向我的项目添加一个额外的 JAR 才能正确解析此类型 我在我的 android sdk 文件夹中进行了一些
  • 如何在kotlin中使用Coroutine每秒调用一个函数

    我刚刚创建了一个应用程序 其中我的函数 getdata 每秒调用一次以从服务器获取新数据 而 updateui 函数将更新 UI 中的视图 我在我的应用程序中不使用任何异步任务或协程 我想这样做 请告诉我我怎样才能做到这一点 这是我的代码
  • mgwt - 以编程方式改变方向

    是否可以在 gwt mgwt 应用程序中更改强制执行特定的屏幕方向 可以说我希望用户始终以横向模式使用应用程序 这取决于 是作为phonegap应用程序 而不是在浏览器内部 如果您作为 Web 应用程序运行 则不需要t get any co
  • 使用 qbs 构建 qt 应用程序

    我想知道在 Linux 上使用 qbs 编译 构建和创建 Android Qt 应用程序的步骤 我拥有所有必要的工具 目前我可以使用 qmake 创建 apk Qbs 目前不支持构建 Qt Android 应用程序 Qbs v1 4 中引入
  • 当单个通知是分组通知的一部分时,NotificationListenerService onNotificationPosted() 会多次调用该通知

    我正在尝试使用NotificationListenerService 监听android 通知 我已经使用 Whatsapp 和 Hangout 通知测试了代码 场景一 来自 1 位用户的 1 条消息 我收到 onNotificationP
  • QML MouseArea 将事件传播到按钮

    我正在开发一个应用程序 其菜单类似于 Android 版 Gmail 收件箱应用程序菜单 基本上 当您按下按钮打开菜单时 它就会滑入视图 用户可以将其滑开或按菜单上的按钮 对于滑动我使用了代码SwipeArea from kovrov ht
  • Google Place Api:来自此 Android 客户端应用程序 com.package.name 的请求被阻止

    我在用PlaceAutocompleteFragment当我单击搜索字段 PlaceAutocompleteFragment 对话框消失时 我收到此错误 errors domain global re ason forbidden mess
  • android 媒体播放器 - 如何禁用范围请求? (Nexus 7 上的音频流中断)

    我有一个音频流应用程序 它运行本地代理服务器 本地代理服务器与互联网流媒体源建立 http 连接 在本地获取并缓冲流数据 然后 在应用程序内部 我使用 MediaPlayer 连接到本地代理服务器 使用方法 mediaPlayer setD
  • Libgdx 和 Google 应用内购买结果

    我遵循了这些指示 https github com libgdx libgdx wiki Interfacing with platform specific code使用 ActionResolver 接口集成 Libgdx 和原生 An

随机推荐