当前位置: 首页 > 知识库问答 >
问题:

如何将此Firebase Recycler Adapter实现转换为Adapter.kt类?

茹轩昂
2023-03-14

我已经编写了一个静态编程语言FirebasRecyclerAdapter,它作为我的主要活动的一部分工作得很好。但是,我希望将此代码放在单独的Main Adapter.kt文件/类中。我该怎么做呢?

var query = FirebaseDatabase.getInstance()
        .reference
        .child("").child("categories")
        .limitToLast(50)

val options = FirebaseRecyclerOptions.Builder<Category>()
        .setQuery(query, Category::class.java)
        .setLifecycleOwner(this)
        .build()

val adapter = object : FirebaseRecyclerAdapter<Category, CategoryHolder>(options) {
    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): CategoryHolder {
        return CategoryHolder(LayoutInflater.from(parent.context)
                .inflate(R.layout.category_row, parent, false))
    }

    protected override fun onBindViewHolder(holder: CategoryHolder, position: Int, model: Category) {
        holder.bind(model)
    }

    override fun onDataChanged() {
        // Called each time there is a new data snapshot. You may want to use this method
        // to hide a loading spinner or check for the "no documents" state and update your UI.
        // ...
    }
}

class CategoryHolder(val customView: View, var category: Category? = null) : RecyclerView.ViewHolder(customView) {

    fun bind(category: Category) {
        with(category) {
            customView.textView_name?.text = category.name
            customView.textView_description?.text = category.description
        }
    }
}

共有1个答案

丌官晨
2023-03-14

根据您的代码,您可以执行以下操作:

class MainAdapter(lifecycleOwner: LifecycleOwner) : FirebaseRecyclerAdapter<Category, CategoryHolder>(buildOptions(lifecycleOwner)) {

    companion object {
        private fun buildQuery() = FirebaseDatabase.getInstance()
                .reference
                .child("").child("categories")
                .limitToLast(50)

        private fun buildOptions(lifecycleOwner:LifecycleOwner) = FirebaseRecyclerOptions.Builder<Category>()
                .setQuery(buildQuery(), Category::class.java)
                .setLifecycleOwner(lifecycleOwner)
                .build()

    }

    class CategoryHolder(val customView: View, var category: Category? = null) : RecyclerView.ViewHolder(customView) {

        fun bind(category: Category) {
            with(category) {
                customView.textView_name?.text = category.name
                customView.textView_description?.text = category.description
            }
        }
    }

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): CategoryHolder {
        return CategoryHolder(LayoutInflater.from(parent.context)
                .inflate(R.layout.category_row, parent, false))
    }

    protected override fun onBindViewHolder(holder: CategoryHolder, position: Int, model: Category) {
        holder.bind(model)
    }

    override fun onDataChanged() {
        // Called each time there is a new data snapshot. You may want to use this method
        // to hide a loading spinner or check for the "no documents" state and update your UI.
        // ...
    }
}

有许多其他的方法来处理这个问题,这只是你的一个封装版本。

 类似资料:
  • 问题内容: 我刚刚开始使用Java 8,并且正在使用以下代码片段: 如何将其转换为Lambda样式? 问题答案: 如果是 功能界面 ,则可以 这是您问题中其他类的存根实现的完整示例:

  • 问题内容: 我想遍历每个单独的ArrayList。我不知道如何将字符串转换为适当的ArrayList对象。 问题答案: 这种语法看起来像是JSON的子集,我猜想客户端实际上是将其编码为JSON。假设这是真的,最简单的方法将是使用现成的JSON解析器和一些简单的Java代码将结果对象转换为代码所需的形式。 当然,您可以手动实现自己的解析器,但是这样做可能不值得,尤其是如果您必须处理字符串转义,空格中

  • 我有下面的curl,它成功地将我登录到一个网站。它返回一个302和一个cookie: 不幸的是,我必须插入真正的用户名 我想使用将其转换为Python3代码。所以我做了这个代码: 但是我从Python3代码(200)得到的响应与我从Curl(302)得到的响应不匹配。这意味着目标服务器感觉到两个请求之间的差异。 如何将curl转换为Python3,它发送完全相同的底层HTTP请求?

  • 问题内容: 您如何将该Perl正则表达式转换为Java? 编译时,对我而言它不匹配“ PattErn”,但失败 问题答案: 您如何将该Perl正则表达式转换为Java? 你不能 造成这种情况的原因很多。这里有一些: Java不像Perl那样支持正则表达式语言。它缺少字形支持(如和完整属性支持(如),缺少Unicode命名字符,没有分支重置运算符,在Java 7之前没有命名捕获组或逻辑转义,没有递归

  • 问题内容: 以下函数从url获取图像并进行加载,然后返回其宽度和高度: 问题是,如果我做这样的事情: 我得到,因为该函数运行但图像尚未加载。 仅当照片已加载且宽度和高度已可用时,如何使用等待/异步返回值? 问题答案: 如何使用/ 将此回调函数转换为Promise? 你不知道与往常一样,您可以使用构造函数。没有语法糖。 仅当照片已加载且宽度和高度已经可用时,如何使用/ 记录值? 你可以做