首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将Uri列表从Firebase数据库检索到RecyclerView

将Uri列表从Firebase数据库检索到RecyclerView
EN

Stack Overflow用户
提问于 2021-07-03 01:35:49
回答 1查看 47关注 0票数 1

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

但是,我不知道如何检索Images的Uris列表来填充回收器视图。

下面是我的onBindViewHolder代码片段:

代码语言:javascript
运行
复制
 @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:

代码语言:javascript
运行
复制
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;
    }

    }

和我的模型类:

代码语言:javascript
运行
复制
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列表。

EN

回答 1

Stack Overflow用户

发布于 2021-07-03 02:00:39

我认为在ViewHolder的创建和赋值上有一个错误的实现。你不应该像每次从资源中获得的文本视图那样链接属性。当使用构造函数初始化时,尝试将它们全部获取。

代码语言:javascript
运行
复制
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构造函数方法中的listerner。

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

相同的视图持有者对资源重复,但对数据不重复。您必须在onBindViewHolder中链接这些数据。

我已经在这里编辑了你的回收器并更新了。请试试这条路。如果有任何问题,请告诉我。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68229298

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档