1

我的应用程序允许用户将图像上传到 Firebase,然后使用上传的图像填充回收视图。我将图像存储在由 UID 以及当前日期和时间组成的根引用下。我想访问这些特定节点,但我不确定如何访问。其次,我想知道是否可以获取 UID 以及用户从回收视图中选择的帖子的时间戳。

Post
 g0lybPOGmWXkM13YEbX8pWbzF7x208-A-201900:44
 desc: "me"
 uid:  "g0lybPOGmWXkM13YEbX8pWbzF7x2"
 image: "image url"
 name:  "some name"
 profileimage: "Image"
 timestamp:  "contains time stamp
 timestamp: "08-A-201900:44"

此代码从 Post 节点检索信息并填充我的 RecycleView

//Retrieves information stored inside Post node...
    public void fetchUserInfo() {
        Toast.makeText(this, "fetch info method called", Toast.LENGTH_SHORT).show();
        postRef = FirebaseDatabase.getInstance().getReference().child("Post");
        postRef.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                for (DataSnapshot ds : dataSnapshot.getChildren()) {
                    value = ds.getValue(Post.class);
                    postIdArray.add(value.getid());
                    postList.add(value);
                }

                adapter = new Adapter(Shop_Activity.this, postList);
                recyclerView.setAdapter(adapter);
            }

            @Override
            public void onCancelled(DatabaseError databaseError) {
                Log.i("Error", databaseError.toString());

            }
        });
    }

适配器类

public class Adapter extends RecyclerView.Adapter<Adapter.ViewHolder>{
    private Context context;
    private ArrayList<Post> userPost;




    public Adapter(Context context, ArrayList<Post> userPost){
        this.context = context;
        this.userPost = userPost;
    }

    @NonNull
    @Override
    public ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
        return new ViewHolder(LayoutInflater.from(context).inflate(R.layout.shop_layout_design,viewGroup, false));

    }

    //this is where you set the value for the ui elements or load up data for the views
    @Override
    public void onBindViewHolder(@NonNull ViewHolder viewHolder, int i) {
        viewHolder.desc.setText(userPost.get(i).getdesc());
        //viewHolder.id.setText(userPost.get(i).getid());
        viewHolder.name.setText(userPost.get(i).getName());
        Glide.with(this.context).load(userPost.get(i).getimage()).into(viewHolder.image);
        Glide.with(this.context).load(userPost.get(i).getProfileimage()).into(viewHolder.profilePicture);

        int postKey = viewHolder.getAdapterPosition();


    }

    @Override
    public int getItemCount() {
        return userPost.size();
    }


    //links up ui elements
    class ViewHolder extends  RecyclerView.ViewHolder{
        private TextView desc;
        private TextView id;
        private ImageView messageImageView;
        private ImageView image;
        private CircleImageView profilePicture;
        private TextView name;

        public ViewHolder(@NonNull View itemView) {
            super(itemView);

            id = itemView.findViewById(R.id.post_title);
            desc = itemView.findViewById(R.id.post_desc);
            image = itemView.findViewById(R.id.post_image);
            profilePicture = itemView.findViewById(R.id.profilePicture);
            name = itemView.findViewById(R.id.name);
            messageImageView = itemView.findViewById(R.id.messageImageView);

            messageImageView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Toast.makeText(context, "Message button pressed", Toast.LENGTH_SHORT).show();
                }
            });



        }



    }
}
4

1 回答 1

0

假设您从该对象的列表中填充您的 RecyclerView 项目,您可以在 Adapter 中获取所选项目的值,如下所示

@Override
public void onBindViewHolder(@NonNull ViewHolder holder, final int position) {
        holder.name.setText(files.get(position).getName());
        holder.itemRow.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Log.d(TAG, files.get(position).getUid());
            }
        });
    }

在这里,files 是指对象的 List/ArrayList。

于 2019-08-08T05:18:16.573 回答