kotlin 如何使用Picasso将Firebase数据库中的图像放到RecyclerView上?

7vhp5slm  于 2022-12-13  发布在  Kotlin
关注(0)|答案(1)|浏览(125)

我想用我的firebase数据库中的图像填充我的RecyclerView。我正在为我的RecyclerView适配器使用Groupie。我的适配器类如下所示

class HobbiesAdapter(val hobbyItem: HobbiesClass): Item<GroupieViewHolder>(){
        override fun bind(viewHolder: GroupieViewHolder, position: Int) {

                viewHolder.itemView.hobbynameTV.text = hobbyItem.hobbyName
                //viewholder.itemView.hobbyImageView ...

        }

        override fun getLayout(): Int {
              return  R.layout.row
        }
}
@Parcelize
class HobbiesClass (val hobbyName:String):Parcelable{
        constructor():this("")
}

下面是我的RecyclerView项目行xml文件:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="164dp"
    android:layout_height="70dp"
    android:layout_marginStart="5dp"
    android:background="@android:color/transparent"
    xmlns:android="http://schemas.android.com/apk/res/android">
        <FrameLayout
            android:id="@+id/frameHobby"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:background="@drawable/hobbiesbackground">
                <TextView
                    android:id="@+id/hobbynameTV"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="Camping"
                    android:textColor="#000000"
                    android:fontFamily="@font/extralight"
                    android:layout_gravity="center|right"
                    android:layout_marginEnd="15dp"/>

                <de.hdodenhof.circleimageview.CircleImageView
                    android:id="@+id/hobbyImageView"
                    android:layout_width="54dp"
                    android:layout_height="47dp"
                    android:layout_gravity="center|left"
                    android:layout_marginStart="12dp"/>

        </FrameLayout>

</androidx.constraintlayout.widget.ConstraintLayout>

我可以通过这段代码检索爱好名称

val reference = database.getReference("Hobbies")
reference.addValueEventListener(object : ValueEventListener {
    override fun onDataChange(snapshot: DataSnapshot) {
        val adapter = GroupAdapter<GroupieViewHolder>()
        for (snap in snapshot.children) {
            val hobbiesItem = snap.getValue(HobbiesClass::class.java)
            if (hobbiesItem != null) {
                adapter.add(HobbiesAdapter(hobbiesItem))

            }
        }

        tophobbies.adapter = adapter
    }

    override fun onCancelled(error: DatabaseError) {

    }

})

这是我的实时数据库

我试着把这个代码块放在adapter.add(HobbiesAdapter(hobbiesItem))下

for (dataSnapshot in snapshot.children){
    var map = dataSnapshot.getValue() as Map<String,Object>
    val imageLink = map.get("imageUrl") as String
    Picasso.get().load(imageLink).into(hobbyImageView)
}

但它只把图像到我的第一个项目在我的回收视图也不是正确的图像。以下是我的应用程序看起来像后,我启动它

mkshixfv

mkshixfv1#

你的问题就在这里:

if (hobbiesItem != null) {
            adapter.add(HobbiesAdapter(hobbiesItem))

        }

在这里,您将传递一个hobbiesItem,而不是hobbiesItem列表给适配器。
1.创建类型为hobbiesItem的全局列表。
1.替换适配器。将(HobbiesAdapter(hobbiesItem))添加到示例列表。添加(HobbiesAdapter(hobbiesItem))
1.然后将此exampleList传递给适配器,如下所示:适配器.add(示例列表).
适配器应接受hobbiesItem列表。onDataChange应将该列表传递给适配器。

相关问题