【问题标题】:Retrieving Uri List from Firebase Database to a RecyclerView从 Firebase 数据库中检索 Uri 列表到 RecyclerView
【发布时间】:2021-09-14 15:37:08
【问题描述】:

我正在开发一个类似社交媒体的应用程序。 我设法从数据库中检索单个值并将其显示在回收站视图中。

但是,我不知道如何检索图像的 Uris 列表以填充回收站视图。

这是我的 onBindViewHolder sn-p:

 @Override
protected void onBindViewHolder(@NonNull PostsViewHolder holder, final int position, @NonNull Posts model) {

    holder.setUserName(model.getUserName());
    holder.setProfileImage(model.getProfileImage());
    holder.setOpinionContent(model.getOpinionContent());

    holder.mView.findViewById(R.id.profile_image).setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            String userId = getRef(position).getKey(); //unique user id for every user
            String publisherId = holder.setUserId(model.getUserId());
            Intent profileIntent = new Intent(getActivity(), FriendProfile.class);
            profileIntent.putExtra("userId", publisherId);
            startActivity(profileIntent);
        }
    });
}

还有我的 ViewHolder:

public static class PostsViewHolder extends RecyclerView.ViewHolder {

    View mView;

    public PostsViewHolder(@NonNull View itemView) {
        super(itemView);
        mView = itemView;
    }
    public void setProfileImage(String profileImage) {
        ImageView myImage = mView.findViewById(R.id.profile_image);
        Picasso.get().load(profileImage).placeholder(R.drawable.ic_baseline_image_24).into(myImage);
    }

    public void setUserName(String userName) {
        TextView myName = mView.findViewById(R.id.userName);
        myName.setText(userName);
    }

    public void setOpinionContent(String opinionContent) {
        TextView myContent = mView.findViewById(R.id.opinion_content);
        myContent.setText(opinionContent);
    }
    public String setUserId(String userId) {
        userId = userId;
        return userId;
    }

    }

和我的模型类:


package com.example.domino;

public class Posts {
    String profileImage;
    String userName;
    String OpinionContent;
    String userId;


    public Posts(){
    }

    public Posts(String profileImage, String userName, String opinionContent, String userId) {
        this.profileImage = profileImage;
        this.userName = userName;
        OpinionContent = opinionContent;
        this.userId = userId;
    }

    public String getProfileImage() {
        return profileImage;
    }

    public void setProfileImage(String profileImage) {
        this.profileImage = profileImage;
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public String getOpinionContent() {
        return OpinionContent;
    }

    public void setOpinionContent(String opinionContent) {
        OpinionContent = opinionContent;
    }

    public String getUserId() {
        return userId;
    }

    public void setUserId(String userId) {
        this.userId = userId;
    }
}

还有我的 Firebase 数据库:

所以我想用多个图像填充我的回收器视图,所以为了做到这一点,我需要能够使用我与回收器适配器一起使用的模型类来配置我的数据库 uri 列表。

【问题讨论】:

    标签: android firebase-realtime-database android-recyclerview android-adapter


    【解决方案1】:

    我认为 ViewHolder Creation 和分配值的实现有误。你不应该链接属性,比如每次从资源中获取的文本视图。尝试在使用构造函数初始化时将它们全部获取。

    package com.pos.aero;
    
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.ImageView;
    import android.widget.TextView;
    
    import androidx.annotation.NonNull;
    import androidx.recyclerview.widget.RecyclerView;
    
    import com.squareup.picasso.Picasso;
    
    import org.jetbrains.annotations.NotNull;
    
    import java.util.List;
    
    public class PostViewAdapter extends RecyclerView.Adapter<PostViewAdapter.PostsViewHolder> {
    
    List<Model> list;
    
    public PostViewAdapter(List<PostalAddress> list){
        this.list = list;
    }
    
    @NonNull
    @NotNull
    @Override
    public PostsViewHolder onCreateViewHolder(@NonNull @NotNull ViewGroup viewGroup, int i) {
        return null;
    }
    
    @Override
    public void onBindViewHolder(@NonNull @NotNull PostsViewHolder postsViewHolder, int i) {
        Model model = list.get(i);
        Picasso.get().load(model.getProfileImage()).placeholder(R.drawable.ic_baseline_image_24).into(postsViewHolder.myImage);
        postsViewHolder.myName.setText(model.getUserName());
        postsViewHolder.myContent.setText(model.getOpinionContent());
    }
    
    @Override
    public int getItemCount() {
        return list.size();
    }
    
    class PostsViewHolder extends RecyclerView.ViewHolder {
        ImageView myImage;
        TextView myName;
        TextView  myContent;
        public PostsViewHolder(@NonNull @NotNull View itemView) {
            super(itemView);
            myImage = itemView.findViewById(R.id.profile_image);
            myName = itemView.findViewById(R.id.userName);
            myContent = itemView.findViewById(R.id.opinion_content);
    
            itemView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    // OnClick Listener implements here
                }
            });
        }
    }
    }
    

    尝试在内部类 RecyclerView Constructor 方法中点击 onlick 监听器。

    每次滚动 onBindViewHolder 都会调用该方法并更新 viewHolder。

    同一个视图持有者正在重复使用资源而不是数据。您必须在 onBindViewHolder 中链接这些数据。

    我已在此处编辑了您的回收站并进行了更新。请尝试这种方式。让我知道任何问题。

    【讨论】:

    • 感谢您的通知。我会试试的,然后告诉你。期待我的问题的答案,如果你能帮忙的话。
    • 好的,我试过了,效果很好。现在我如何从我的数据库中获取多个图像到我的模型类。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-03
    • 2021-09-01
    • 1970-01-01
    相关资源
    最近更新 更多