【问题标题】:Can't populate a recycler using a collection无法使用集合填充回收站
【发布时间】:2020-01-22 12:38:28
【问题描述】:

我希望我的 RecyclerView 的每一行都显示集合中一个文档的所有详细信息。

我使用了完全相同的适配器代码,尽管使用不同的类进行序列化。而且效果很好。但在这种情况下,它根本不起作用。 但是代码并没有进入填充视图。

我的数据库是这样的:

reviews--Orange--vault--|
                        |-firstReview
                        |-secondReview
                        |-sjdeifhaih5aseoi
                         ...

片段中我的查询和适配器​​:

override fun onActivityCreated(savedInstanceState: Bundle?) {
        super.onActivityCreated(savedInstanceState)

        viewModel = ViewModelProviders.of(this).get(ReviewViewModel::class.java)

        val reviewQuery = FirebaseFirestore.getInstance().collection("reviews").document("Orange").collection("vault")
        val reviewBurnOptions = FirestoreRecyclerOptions.Builder<Review>()
            .setQuery(reviewQuery, object : SnapshotParser<Review> {
                override fun parseSnapshot(snapshot: DocumentSnapshot): Review {
                    return snapshot.toObject(Review::class.java)!!.also {
                        it.id = snapshot.id
                    }
                }
            }).setLifecycleOwner(this)

        reviewRecycler.adapter=ReviewBurnAdapter(reviewBurnOptions.build())}

    class ReviewBurnAdapter(options: FirestoreRecyclerOptions<Review>) :
        FirestoreRecyclerAdapter<Review, ReviewBurnAdapter.ViewHolder>(options) {

        override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {//I never reach this point
            val view = LayoutInflater.from(parent.context).inflate(R.layout.row_review, parent, false)
            return ViewHolder(view)
        }

        override fun onBindViewHolder(holder: ViewHolder, position: Int, item: Review) {
            holder.apply {
                holder.itemView.rowAuthor.text = item.author
            }
        }


        inner class ViewHolder(override val containerView: View) :
            RecyclerView.ViewHolder(containerView), LayoutContainer
    }

要序列化的类:

import com.google.firebase.firestore.Exclude
import com.google.firebase.firestore.PropertyName
import java.util.*

class Review(
    @get:Exclude var id: String = "DEVIL",

    @JvmField @PropertyName(AUTHOR) var author: String = "",
    @JvmField @PropertyName(WRITEUP) var writeup: String = "",
    //@JvmField @PropertyName(MOMENT) var moment:Date=Date(1997,12,1),
    @JvmField @PropertyName(RATING) var rating: Int = 0
) {
    companion object {
        const val AUTHOR = "author"
        const val WRITEUP = "writeup"
        const val RATING = "rating"
        //const val MOMENT="moment"
    }
}

此外,没有错误,它只是永远不会到达将生成并填充 viewHolders 的代码。

【问题讨论】:

  • 我想你错过了Adapter 的一个重要方法,即getItemCount()
  • 除了@iCantC 注释,还要检查你是否为RecyclerView 设置了layoutManager 。在此之前,请确保您从 FirebaseFirestore 获取数据。如果效果不佳,请尝试发布完整的 Activity 代码。
  • 请添加它的屏幕截图,而不是描述您的数据库的外观。还请添加您的Review 课程的内容,也请回复@AlexMamo

标签: android kotlin android-recyclerview google-cloud-firestore firebaseui


【解决方案1】:

好吧,修复非常简单,正如@Prashant Jha 指出的那样,我没有为我的 RecyclerView 指定布局管理器 -_-

为了清楚起见,我添加了 app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"

到我的 xml,一切正常。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-18
    • 2021-07-28
    • 1970-01-01
    相关资源
    最近更新 更多