【发布时间】:2023-03-27 03:48:01
【问题描述】:
我正在尝试使用我的 firebase 数据库中的数据填充我的 recyclerview。我对这些东西很陌生。我看了一些教程,但仍然无法做到。 这是我的费用项目类。我正在使用 GroupieViewHolder。
class ExpenseItems(val title: String, val date:String, val value:String, val description:String, val category: String): Item<GroupieViewHolder>() {
override fun bind(viewHolder: GroupieViewHolder, position: Int) {
viewHolder.itemView.expenseTitleTextView.text = title
viewHolder.itemView.expenseDateTextView.text = date
viewHolder.itemView.expenseItemValue.text = value
viewHolder.itemView.descriptionText.text = description
viewHolder.itemView.expenselistCategory.text = category
}
override fun getLayout(): Int {
return R.layout.expenselist
}
}
这是我拥有的 Firebase 代码。我在 logcat 上获得了有关当前用户费用的信息,但我不知道如何将它们放在适配器上。
private fun getCurrentUserExpenses(){
val uid = FirebaseAuth.getInstance().currentUser!!.uid
val reference = FirebaseDatabase.getInstance().getReference("users").child(uid).child("Expenses")
reference.addListenerForSingleValueEvent(object : ValueEventListener{
override fun onDataChange(snapshot: DataSnapshot) {
val adapter = GroupAdapter<GroupieViewHolder>()
snapshot.children.forEach{
Log.d("Expense items",it.toString())
}
}
override fun onCancelled(error: DatabaseError) {
}
})
}
这是我的费用清单布局
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/expenseItem"
android:layout_width="match_parent"
android:layout_height="80dp"
android:background="@drawable/expenselist_background">
<de.hdodenhof.circleimageview.CircleImageView
android:id="@+id/expensListImageView"
android:layout_width="35dp"
android:layout_height="35dp"
android:layout_marginLeft="1dp"
android:layout_marginTop="4dp"
android:layout_marginBottom="8dp"
android:src="@drawable/renting"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.0" />
<TextView
android:id="@+id/expenseTitleTextView"
android:layout_width="88dp"
android:layout_height="18dp"
android:layout_marginStart="12dp"
android:layout_marginTop="4dp"
android:fontFamily="@font/regular"
android:text="Expense title"
android:textColor="@color/white"
android:textSize="13dp"
app:layout_constraintStart_toEndOf="@+id/expensListImageView"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/expenseDateTextView"
android:layout_width="wrap_content"
android:layout_height="12dp"
android:layout_marginStart="12dp"
android:layout_marginTop="4dp"
android:fontFamily="@font/poppinsextralight"
android:text="Date"
android:textColor="@color/white"
android:textSize="9dp"
app:layout_constraintStart_toEndOf="@+id/expensListImageView"
app:layout_constraintTop_toBottomOf="@+id/expenseTitleTextView" />
<TextView
android:id="@+id/expenseItemValue"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:fontFamily="@font/medium"
android:text="$999"
android:textColor="@color/white"
android:textSize="13dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.465" />
<TextView
android:id="@+id/description"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="1dp"
android:layout_marginTop="10dp"
android:fontFamily="@font/regular"
android:text="Description:"
android:textColor="@color/white"
android:textSize="13dp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/expensListImageView" />
<TextView
android:id="@+id/descriptionText"
android:layout_width="33dp"
android:layout_height="15dp"
android:layout_marginStart="4dp"
android:fontFamily="@font/poppinsextralight"
android:text="TextView"
android:textColor="@color/white"
android:textSize="9dp"
app:layout_constraintBottom_toBottomOf="@+id/description"
app:layout_constraintStart_toEndOf="@+id/description"
app:layout_constraintTop_toTopOf="@+id/description" />
<TextView
android:id="@+id/expenselistCategory"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="4dp"
android:layout_marginTop="6dp"
android:fontFamily="@font/poppinslight"
android:text="Category"
android:textColor="@color/white"
android:textSize="11dp"
app:layout_constraintStart_toEndOf="@+id/expenseTitleTextView"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
这是我的数据库
提前谢谢你
编辑
这就是我现在所做的。我几乎修复了它,但有一个小问题。这是我的 getCurrentUserExpenses 函数的样子。
private fun getCurrentUserExpenses(){
val uid = FirebaseAuth.getInstance().currentUser!!.uid
val reference = FirebaseDatabase.getInstance().getReference("/users").child(uid).child("Expenses").child("2021").child("May")
reference.addValueEventListener(object : ValueEventListener{
override fun onDataChange(snapshot: DataSnapshot) {
val adapter = GroupAdapter<GroupieViewHolder>()
snapshot.children.forEach{
val expenses = it.getValue(AddedExpense::class.java)
Log.d("Expense items",it.toString())
if (expenses!=null){
adapter.add(ExpenseItems(expenses))
}
}
expensesRecylerView.adapter=adapter
}
override fun onCancelled(error: DatabaseError) {
}
})
}
有了这个,我只能得到一个月的费用。我希望显示当前用户的所有费用。当我使用 FirebaseDatabase.getInstance().getReference("/users").child(uid).child("Expenses") 时,它只显示 1 项,我猜它是 2021 节点。
我也对 ExpenseItems 类进行了更改
class ExpenseItems(val addedExpense:AddedExpense): Item<GroupieViewHolder>() {
override fun bind(viewHolder: GroupieViewHolder, position: Int) {
viewHolder.itemView.expenseTitleTextView.text = addedExpense.itemName
viewHolder.itemView.expenseDateTextView.text = addedExpense.itemDate
viewHolder.itemView.expenseItemValue.text = addedExpense.itemValue
viewHolder.itemView.descriptionText.text = addedExpense.itemDesc
viewHolder.itemView.expenselistCategory.text = addedExpense.itemCategory
}
override fun getLayout(): Int {
return R.layout.expenselist
}
}
这也是我的 AdditionalExpense 类
@Parcelize
class AddedExpense(val itemName:String, val itemDesc:String,val itemCategory:String,val itemValue:String,val itemDate:String):Parcelable{
constructor(): this("","","","","")
}
【问题讨论】:
-
你能分享你的适配器sn-p吗
-
@dinkar_kumar 我正在使用此视频中的适配器 letsbuildthatapp.com/course_video?id=3582 他正在使用 groupie 依赖项
-
能不能把你的转接码sn-p给我看一下,我自己推演会有点困难
-
@dinkar_kumar 这是我在我的代码和他的代码mediafire.com/file/i89tctru6t1bzgo/comparision.txt/file 之间进行的一个小比较,他的用户名显示在他的 recyclerview 上
-
现在到底是什么问题?
标签: android firebase kotlin android-recyclerview