首页 > 解决方案 > 使用意图将项目数据从 Firestore UI RecyclerView 发送到下一个活动

问题描述

我已经使用 Firestore UI 实现了 RecyclerView。它当前显示用户名和个人资料图片。当用户单击 RecyclerView 的任何项目时,他将进入用户配置文件活动。在那里,应该显示用户的姓名和个人资料图片,目前情况并非如此,因为我不知道如何将一个项目的数据发送到下一个活动并将 TextView 设置为其值。意图是最好的方法还是应该只发送被点击的用户的 UID,然后在“用户配置文件活动”中从 Firestore 检索用户的数据?我怎样才能做到这一点?有关于如何使用实时数据库实现此目的的教程,但我不想切换数据库。

这是我实现 RecyclerView 的活动:

...
@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_player_search);
...
        userAdapter.setOnItemClickListener(new UserAdapter.OnItemClickListener() {
            @Override
            public void onItemClick(DocumentSnapshot documentSnapshot, int position) {

                String user_id = documentSnapshot.getId();
            }
        });
...

这是 RecyclerView 的 Adapter 类,其意图是打开下一个活动:

public class UserAdapter extends FirestoreRecyclerAdapter<Users, UserAdapter.UserHolder> {
    private OnItemClickListener listener;

    public UserAdapter(@NonNull FirestoreRecyclerOptions<Users> options) {
        super(options);
    }

    @Override
    protected void onBindViewHolder(@NonNull UserHolder holder, int position, @NonNull Users model) {

        holder.textViewUsername.setText(model.getUsername());

        Picasso.get()
                .load(model.getAvatar_id())
                .into(holder.circleImageView);
    }

    @NonNull
    @Override
    public UserHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.listitem_search_result,parent, false);
        return new UserHolder(view);
    }

    class UserHolder extends RecyclerView.ViewHolder {

        TextView textViewUsername;
        CircleImageView circleImageView;

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

            textViewUsername = itemView.findViewById(R.id.player_name_search);
            circleImageView = itemView.findViewById(R.id.image_view_avatar_player_search);

            itemView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    int position = getAdapterPosition();
                    if (position != RecyclerView.NO_POSITION && listener != null){
                        listener.onItemClick(getSnapshots().getSnapshot(position),(position));
                        Intent i = new Intent (itemView.getContext(), FriendRequest.class);
                        itemView.getContext().startActivity(i);
                    }

                }
            });
        }
    }

    public interface OnItemClickListener{
        void onItemClick (DocumentSnapshot documentSnapshot, int position);

    }

    public void setOnItemClickListener(OnItemClickListener listener){
        this.listener = listener;
    }
}

我的 Collection 的结构是这样的:

User
    uid
        username: "Player1"
        avatar_id: "uri of a picture stored in Storage"

任何帮助深表感谢!

标签: androidfirebaseandroid-recyclerviewgoogle-cloud-firestorefirebaseui

解决方案


为了将信息从一项活动发送到另一项活动,请使用 Intent

Intent i = new Intent (itemView.getContext(), FriendRequest.class);
i.putExtra("username", textViewUsername.getText().toString());
i.putExtra("profile",model.getAvatar_id());
itemView.getContext().startActivity(i);

并在您的 FriendRequest 活动中,使用 getIntent 接收该数据。

Intent intent = getIntent();
String username = intent.getStringExtra("username");
String link = intent.getExtra("profile");

现在您可以使用这些值了。


推荐阅读