Recyclerview 未显示来自 Firebase Kotlin 的数据
Posted
技术标签:
【中文标题】Recyclerview 未显示来自 Firebase Kotlin 的数据【英文标题】:Recyclerview is not showing data from Firebase Kotlin 【发布时间】:2018-08-30 11:27:55 【问题描述】:正如标题所说,我从昨天开始使用 Kotlin。我想用来自 Firebase 的数据填充 RecyclerView。
我尝试了一些方法,我构建了一个适配器并尝试填充 RecyclerView,我的数据将进入 Firebasebase 但未显示在 RecyclerView 中,并且我没有收到任何错误。
我找不到任何关于 Kotlin 语言问题的教程
这是我的适配器:
class QuestionAdapter(var items : ArrayList<Question>): RecyclerView.Adapter<QuestionAdapter.ViewHolder>()
override fun getItemCount(): Int
return items.size
override fun onBindViewHolder(holder: ViewHolder?, position: Int)
var userDto = items[position]
holder?.titleTextView?.text = userDto.titlu
holder?.msgTextView?.text = userDto.uid
override fun onCreateViewHolder(parent: ViewGroup?, viewType: Int): ViewHolder
val itemView = LayoutInflater.from(parent?.context)
.inflate(R.layout.conv_layout, parent, false)
return ViewHolder(itemView)
class ViewHolder(row: View) : RecyclerView.ViewHolder(row)
var titleTextView: TextView? = null
var msgTextView: TextView? = null
init
this.titleTextView = row?.findViewById<TextView>(R.id.titleTextView)
this.msgTextView = row?.findViewById<TextView>(R.id.msgTextView)
这是我的 Activity 代码:
private fun populalteQuestionsList()
val mChatDatabaseReference = FirebaseDatabase.getInstance().reference.child(Constants.USERS).child(mUserID).child(Constants.CHAT).child(Constants.QUESTION)
val query = mChatDatabaseReference.orderByChild("time")
query.addListenerForSingleValueEvent(object: ValueEventListener
override fun onDataChange(dataSnapshot: DataSnapshot?)
mRecyclerView.layoutManager = LinearLayoutManager(this@MainActivity)
mRecyclerView.setHasFixedSize(true)
val questions = ArrayList<Question>()
val adapter = QuestionAdapter(questions)
mRecyclerView.adapter = adapter
override fun onCancelled(error: DatabaseError?)
)
【问题讨论】:
【参考方案1】:Recyclerview 未显示来自 Firebase Kotlin 的数据
因为您没有在 questions
ArrayList<Question>()
签入您的代码
试试这个
override fun onDataChange(dataSnapshot: DataSnapshot?)
mRecyclerView.layoutManager = LinearLayoutManager(this@MainActivity)
mRecyclerView.setHasFixedSize(true)
val questions = ArrayList<Question>()
val adapter = QuestionAdapter(questions)
// add data here inside your questions ArrayList<Question>()
mRecyclerView.adapter = adapter
【讨论】:
【参考方案2】:我希望在您的 adater 中定义 getItemCount() 方法,然后您可以更改以下代码...
private fun populalteQuestionsList()
val mChatDatabaseReference = FirebaseDatabase.getInstance().reference.child(Constants.USERS).child(mUserID).child(Constants.CHAT).child(Constants.QUESTION)
val query = mChatDatabaseReference.orderByChild("time")
query.addListenerForSingleValueEvent(object: ValueEventListener
override fun onDataChange(dataSnapshot: DataSnapshot?)
mRecyclerView.layoutManager = LinearLayoutManager(this@MainActivity)
mRecyclerView.setHasFixedSize(true)
val questions = ArrayList<Question>()
val question = dataSnapshot.getValue(Question::class.java)
questions.add(question)
val adapter = QuestionAdapter(questions)
mRecyclerView.adapter = adapter
adapter.notifyDataSetChanged()
override fun onCancelled(error: DatabaseError?)
)
我希望适配器有以下方法...
@Override
public int getItemCount()
return items.size();
【讨论】:
当您将 getItemCount() 方法复制到适配器时,它会自动转换为 kotlin。并检查您的 Firebase 数据库存储问题类数据并检查 onDataChange 方法是否提供数据。 我知道,但这条线,我无法转换,它不工作 "questions.addAll(dataSnapshot.getValue(Question.class));" 抱歉,您可以添加这一行 val question = dataSnapshot.getValue(Question::class.java) questions.add(question) 抱歉打扰你了,val question = dataSnapshot.getValue(Question::class.java) 不是 val questions = ArrayList以上是关于Recyclerview 未显示来自 Firebase Kotlin 的数据的主要内容,如果未能解决你的问题,请参考以下文章
回收站视图未在 Fragment (Android) 上显示项目
如何在 Kotlin 中显示来自 RecyclerView 的全屏图像?