Android 是否可以获取用户从回收视图中选择的帖子的UID?
我的应用程序允许用户将图像上传到Firebase,然后用上传的图像填充回收视图。我将图像存储在一个根引用下,该根引用由UID以及当前日期和时间组成。我想访问这些特定节点,但我不确定如何访问。其次,我想知道是否有可能获得UID以及用户从循环视图中选择的帖子的时间戳Android 是否可以获取用户从回收视图中选择的帖子的UID?,android,firebase,firebase-realtime-database,Android,Firebase,Firebase Realtime Database,我的应用程序允许用户将图像上传到Firebase,然后用上传的图像填充回收视图。我将图像存储在一个根引用下,该根引用由UID以及当前日期和时间组成。我想访问这些特定节点,但我不确定如何访问。其次,我想知道是否有可能获得UID以及用户从循环视图中选择的帖子的时间戳 Post g0lybPOGmWXkM13YEbX8pWbzF7x208-A-201900:44 desc: "me" uid: "g0lybPOGmWXkM13YEbX8pWbzF7x2" image: "image url"
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();
}
});
}
}
}
公共类适配器扩展了RecyclerView.Adapter{
私人语境;
私有arraylistuserpost;
公共适配器(上下文,ArrayList userPost){
this.context=上下文;
this.userPost=userPost;
}
@非空
@凌驾
public ViewHolder onCreateViewHolder(@NonNull ViewGroup ViewGroup,int i){
返回新的视图持有者(LayoutFlater.from(上下文)。充气(R.layout.shop_layout_design,viewGroup,false));
}
//这是为ui元素设置值或加载视图数据的地方
@凌驾
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())到(viewHolder.image)中;
Glide.with(this.context).load(userPost.get(i.getProfileimage())到(viewHolder.profilePicture)中;
int postKey=viewHolder.getAdapterPosition();
}
@凌驾
public int getItemCount(){
返回userPost.size();
}
//链接ui元素
类ViewHolder扩展了RecyclerView.ViewHolder{
私有文本视图描述;
私有文本视图id;
私有ImageView消息ImageView;
私有图像查看图像;
私有CircleImageView配置文件图片;
私有文本视图名称;
公共视图持有者(@NonNull View itemView){
超级(项目视图);
id=itemView.findviewbyd(R.id.post_title);
desc=itemView.findviewbyd(R.id.post\u desc);
image=itemView.findviewbyd(R.id.post_image);
profilePicture=itemView.findViewById(R.id.profilePicture);
name=itemView.findviewbyd(R.id.name);
messageImageView=itemView.findViewById(R.id.messageImageView);
messageImageView.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
Toast.makeText(上下文,“消息按钮按下”,Toast.LENGTH_SHORT.show();
}
});
}
}
}
假设您从该对象的列表中填充RecyclerView项,您可以在适配器中获得所选项的值,如下所示
@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());
}
});
}
这里,文件指的是对象的列表/ArrayList。假设您从该对象的列表中填充RecyclerView项,您可以在适配器中获得所选项的值,如下所示
@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());
}
});
}
在这里,文件指的是对象的列表/数组列表。它完全取决于Firebase上的结构。在问题中发布一些相关代码,以便我们更好地了解情况。发布您的RecyclerView适配器代码。FirebaseDatabase.getInstance().getReference().child(“uid”);这完全取决于Firebase上的结构。在问题中发布一些相关代码,以便我们更好地了解情况。发布您的RecyclerView适配器代码。FirebaseDatabase.getInstance().getReference().child(“uid”);虽然这种方法适用于点击recyclerview,但从长远来看,它可能会导致内存问题,这是因为每次绑定整行时,您都在创建一个新的
视图实例。OnClickListener
,要解决这个问题,最好使用一个注册点击的界面。@GastónSaillén同意。只是想给OP一个启示。虽然这种方法适用于点击recyclerview,但长期来看可能会导致内存问题,这是因为每次绑定整行时,您都在创建一个新的视图实例。OnClickListener
,要解决此问题,“使用一个注册点击的界面将是一个最佳实践。”加斯托尼塞莱恩同意。只是想给OP一个启示。