使用 updateOptions() 更新 FirestoreRecyclerAdapter 会出现类型不匹配错误

2024-03-15

我正在使用 Firebase UI 填充我的 RecyclerView,一切正常,除非我在单击按钮时尝试更改列表元素的顺序。

这是我的适配器代码:

private var query: Query = FirebaseFirestore.getInstance()
    .collection("restaurant")
    .orderBy("review", Query.Direction.DESCENDING)

var options: FirestoreRecyclerOptions<Restaurant> = FirestoreRecyclerOptions.Builder<Restaurant>()
    .setQuery(query, Restaurant::class.java)
    .build()

private var adapter: FirestoreRecyclerAdapter<*, *> =
    object : FirestoreRecyclerAdapter<Restaurant, RestaurantListAdapter.ViewHolder?>(options) {
        override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RestaurantListAdapter.ViewHolder {
            val view = LayoutInflater.from(parent.context)
                .inflate(R.layout.restaurant_card_view_design, parent, false)
            return RestaurantListAdapter.ViewHolder(view)
        }

        @SuppressLint("ResourceAsColor")
        override fun onBindViewHolder(
            holder: RestaurantListAdapter.ViewHolder , position: Int, model: Restaurant
        ) {
            val sharedPref = getPreferences(Context.MODE_PRIVATE) ?: return
            val defaultValue = resources.getString(R.string.def_loc_key)
            val lat = sharedPref.getFloat(getString(R.string.latitude_key), defaultValue.toFloat())
            val long = sharedPref.getFloat(getString(R.string.longitude_key), defaultValue.toFloat())

            model.calculateDistance(lat, long)

            // sets the text to the textview from our itemHolder class
            holder.distance.text = String.format("%.1f mi", model.distance)
            holder.name.text = model.name
            holder.reviewNum.text = String.format("(%1d)", model.numReview)
            holder.review.rating = model.review
            if (position == 0) {
                //holder.card.setCardBackgroundColor(R.color.recommendedCard)
                holder.card.setCardBackgroundColor(ContextCompat.getColor(holder.card.context, R.color.recommendedCard))
            }
            holder.logo.setImageResource(
                resources.getIdentifier(model.logo , "drawable",
                packageName
            ))
        }
    }

这是我的按钮单击代码(在 onCreate() 内):

val sortButton = findViewById<ImageButton>(R.id.sortButton)
sortButton.setOnClickListener {
    query = query.orderBy("numReviews", Query.Direction.DESCENDING) // new campo

    options = FirestoreRecyclerOptions.Builder<Restaurant>()
        .setQuery(query, Restaurant::class.java).build()

    adapter.updateOptions(options)
}

我在最后一行收到一个错误:

类型不匹配:推断类型为 FirestoreRecyclerOptions 但没有预期的内容


当您使用以下查询时:

private var query: Query = FirebaseFirestore.getInstance()
    .collection("restaurant")
    .orderBy("review", Query.Direction.DESCENDING)

它只是意味着尝试获取“餐厅”集合中存在的所有文档,并按“评论”降序排列。这很好。但是,当您使用以下行时:

query = query.orderBy("numReviews", Query.Direction.DESCENDING)

这意味着您要向现有查询添加额外的订单。因此,添加上述 orderBy 后,您的查询如下所示:

private var query: Query = FirebaseFirestore.getInstance()
    .collection("restaurant")
    .orderBy("review", Query.Direction.DESCENDING)
    .orderBy("numReviews", Query.Direction.DESCENDING)

这种类型的查询默认不起作用,因为它需要index https://stackoverflow.com/questions/50305328/firestore-whereequalto-orderby-and-limit1-not-working.

请注意,Cloud Firestore 查询是不可变的,这意味着您无法更改现有查询的属性。如果通过调用“orderBy()”方法更改值,它将成为一个新查询。因此,如果您只想更改顺序,只需将第二个查询更改为:

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

使用 updateOptions() 更新 FirestoreRecyclerAdapter 会出现类型不匹配错误 的相关文章

  • 谷歌管理的虚拟机上的Websocket端口

    我尝试使用托管虚拟机通过端口 3000 运行 Web 套接字服务器 但我只能通过实例的 IP 连接到它 而不能通过我自己的域或 appspot 域连接到它 当我在端口 80 上访问应用程序时 我得到应用程序在端口 8080 上发送的正确响应
  • Android 7.0(牛轧糖)上的活动过渡动画的 Z 顺序发生了变化吗?

    我使用自定义动画 onBackPressed 使用 Override public void onBackPressed super onBackPressed overridePendingTransition R anim zoom i
  • Android 单例对话框

    我有一个处理大量进度对话框的 Android 应用程序 我必须为每个活动创建一个单独的对话框 对话框创建在构造时将活动 上下文 作为参数 有没有一种方法可以创建单个对话框 与应用程序而不是活动相关 并在不同的活动中显示它 这样我就不必重复创
  • 如何在Android Studio中查看所有TODO任务?

    如何在 Android Studio 中打开一个视图 其中包含我使用创建的所有任务 TODO评论会显示吗 您可以在左下角菜单栏找到此 视图 称为待办事项 or 安卓工作室 转到 View gt Tool Windows gt TODO 显示
  • 可绘制 Android 上的颜色叠加

    我一直在这里关注这个教程中 对角线切割视图 https cdn images 1 medium com max 800 1 IIPRX4i4cOAdxAMeGpY92w png获得对角线视图效果
  • ubuntu升级到14.04 TLS后eclipse Juno经常自动关闭

    在升级到 14 04 之前 我只是在使用 eclipse 但是升级到 14 04 后 我的 eclipse 经常关闭 没有任何警告消息 它会在我的桌面上生成一个 hs err pid4612 log 文件 我该如何解决这个问题 在 ecli
  • 使用材料设计在工具栏中滑动选项卡

    我一直在学习使用材料设计使用滑动选项卡这个帖子 http www exoguru com android material design navigation android sliding tabs with material desig
  • Kotlin 委托属性导致 Android Studio 中预览渲染错误

    我创建了一个自定义属性 专门用于保存需要为我的项目之一调用 invalidate 的视图属性 class InvalidatingProperty
  • 请求的操作:声明您的广告 ID 权限

    今天我收到这封电子邮件 去年 7 月 我们宣布了广告政策变更 以帮助加强 安全和隐私 我们对使用的标识符添加了新的限制 针对儿童的应用程序 当用户选择删除他们的 广告 ID 以选择退出个性化广告 如果满足以下条件 开发人员将收到一串零而不是
  • 无法加载游戏:findLibrary 返回 null:使用 cocos2d-x,尽管多次尝试仍没有成功?

    我想使用 Eclipse Mobile For Developers NDK Android SDK 和 Cocos2d x 尝试一个简单的项目 我已正确设置路径 cocos2d x create android project sh ND
  • Firebase 停止监听 onAuthStateChanged

    从版本 3 0 0 开始 我很难删除身份验证状态更改侦听器 要根据文档启动侦听器 firebase auth onAuthStateChanged function user handle it 但是 我在文档中找不到任何涉及删除身份验证状
  • GCM 推送通知导致 502 Bad Gateway

    我有一个 Net Windows 服务 通过以下方式发送 GCM 推送通知https android googleapis com gcm send https android googleapis com gcm send 该服务以 10
  • Android 上为什么会出现线程泄漏?

    我在 Android 应用程序中注意到 每次退出主屏幕时 堆大小 泄漏 都会增加 ByteArrayOutputStream 的量 我能做到的最好的办法就是添加 this mByteArrayOutputStream null 在 的最后r
  • 使用 Volley 发送带有 JSON 数据的 POST 请求

    我想发送一个新的JsonObjectRequest要求 我想接收 JSON 数据 来自服务器的响应 好的 我想通过此请求将 JSON 格式的数据发送到服务器 JsonObjectRequest request new JsonObjectR
  • 访问 Android 崩溃报告

    当我使用 Sports Tracker 时 它崩溃了 当我按下 报告 按钮来报告崩溃时 我会看到一个简单的输入字段 要求对崩溃做出评论 但是 按 预览 将使我了解正在与崩溃日志一起发送的数据 数据量实际上是巨大的 包括日期 时间 设备名称
  • 取消现有 Firebase 应用程序的链接?

    我想要 链接到新的或现有的 Firebase 项目和应用 但 crashlytics 仪表板告诉我我的项目已经链接 如何取消链接我现有的项目 要取消 Fabric 应用与 Firebase 的链接 请按照以下步骤操作 转到 Firebase
  • 语音识别器在第一个结果后听不到声音

    我在Android中使用SpeechRecognizer和RecognizerIntent来实现语音识别 我的目标是在语音识别器在屏幕上显示结果后重新开始收听语音 为此 我使用以下代码 问题是 第一次运行良好并显示结果 但在第二次开始监听
  • Android:“无法初始化可视化引擎”

    我三天前开始为 Android 编程 今天我想使用 android Api 中的一些类来做一些更困难的事情 我找到了 Visualizer 类 第一次尝试时遇到了问题 我在不同论坛上读到很多帖子 人们有同样的问题 无法初始化可视化引擎 我将
  • 是否可以在 AlertDialog 中自定义正向和负向按钮?

    是否可以在 AlertDialog 中自定义正向和负向按钮 我需要用自定义替换默认的正面和负面外观 setPositiveButton android R string ok new DialogInterface OnClickListe
  • Android 上方向改变时如何避免重新启动 Activity

    我正在创建一个 Android 应用程序 在其中在画布上绘制视图 当设备的方向改变时 活动将重新启动 我不想这样 如何避免在方向改变时重新启动 Activity 有多种方法可以做到这一点 但正如给定的here https stackover

随机推荐