在 onBindViewHolder 中为 RecyclerView 设置 Firebase 实时数据库参考中的图像
Posted
技术标签:
【中文标题】在 onBindViewHolder 中为 RecyclerView 设置 Firebase 实时数据库参考中的图像【英文标题】:Setting Image from a Firebase Realtime Database Reference in onBindViewHolder for a RecyclerView 【发布时间】:2021-11-23 08:53:41 【问题描述】:我正在尝试在我的HomeFragment
上设置 RecyclerView,并且我正处于设置适配器的位置。如何在onBindViewHolder
函数中设置图像?我需要在onBindViewHolder
函数中更改Glide.with()
中的类吗?另外,对于DatabaseReference
,如何获取实际的 uid 以供参考?谢谢!
我的一个数据库参考
category.xml
<androidx.cardview.widget.CardView 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:layout_
android:layout_
android:background="@drawable/category_view_background">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_
android:layout_>
<ImageView
android:id="@+id/categoryImageView"
android:layout_
android:layout_
android:background="@drawable/image_rounded_top_corners"
android:scaleType="fitXY"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:srcCompat="@drawable/profile_photo_"
android:contentDescription="@string/category_image" />
<TextView
android:id="@+id/categoryNameTextView"
android:layout_
android:layout_
android:text="@string/category_name"
android:textAlignment="center"
android:textColor="@color/black"
android:textSize="14sp"
android:textStyle="bold"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/categoryImageView" />
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.cardview.widget.CardView>
category.java
public class category
private String categoryImage;
private URL categoryImageUrl;
private String category;
private String uid;
public category()
public String getCategoryImage()
return categoryImage;
public void setCategoryImage(String categoryImage)
this.categoryImage = categoryImage;
public URL getCategoryImageUrl() return categoryImageUrl;
public void setCategoryImageUrl(URL categoryImageUrl) this.categoryImageUrl = categoryImageUrl;
public String getCategory()
return category;
public void setCategory(String category)
this.category = category;
public String getUid()
return uid;
public void setUid(String uid)
this.uid = uid;
public String setCategory()
return "";
categoryAdapter.java
public class categoryAdapter extends FirebaseRecyclerAdapter<category, categoryAdapter.categoryViewholder>
public categoryAdapter(@NonNull FirebaseRecyclerOptions<category> options)
super(options);
@Override protected void onBindViewHolder(@NonNull categoryAdapter.categoryViewholder holder, int position, @NonNull category model)
holder.category.setText(model.setCategory());
DatabaseReference url_db = FirebaseDatabase.getInstance().getReference().child("job-category").child(model.getUid()).child("categoryImage");
url_db.addListenerForSingleValueEvent(new ValueEventListener()
@Override
public void onDataChange(@NonNull DataSnapshot snapshot)
String image = snapshot.child("categoryImage").getValue(String.class);
Glide.with(this, category.class).load(image).into(holder.categoryImage);
@Override
public void onCancelled(@NonNull DatabaseError error)
);
@NonNull @Override public categoryViewholder onCreateViewHolder(@NonNull ViewGroup parent, int viewType)
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.category, parent, false);
return new categoryViewholder(view);
static class categoryViewholder extends RecyclerView.ViewHolder
TextView category;
Image categoryImage;
public categoryViewholder(@NonNull View itemView)
super(itemView);
category = itemView.findViewById(R.id.categoryNameTextView);
categoryImage = itemView.findViewById(R.id.categoryImageView);
【问题讨论】:
您需要使用 ImageView 小部件而不是 Image,然后在字符串中设置图像路径。 我也建议使用Glide 【参考方案1】:在您的category
类中,您应该使用图像的url,categoryImage
的类型应该是String
。
然后在您的onBindViewHolder
中加载并显示图像,使用Glide
【讨论】:
以上是关于在 onBindViewHolder 中为 RecyclerView 设置 Firebase 实时数据库参考中的图像的主要内容,如果未能解决你的问题,请参考以下文章
RecyclerView ItemClickListener 在 OnBindViewHolder 中不起作用
如何在“onBindViewHolder”中获取recyclerview项目的高度
为啥 onBindViewHolder 索引在 Recycler View 中没有增加?
Android:在 onBindViewHolder 中放置 setOnclickListener 或 setOnLongClickListener 是不是正确?