You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过RecyclerView在Fragment间传递Firebase用户ID?解决空指针异常

问题分析与解决

错误根源

你在发送Fragment里犯了核心逻辑错误:创建了要跳转的AnotherUserFragment实例fragment,但却把包含用户ID的Bundle设置给了无关的AddUserFragment实例addUserFragment,最终事务替换的是未携带参数的fragment,导致目标Fragment调用getArguments()返回null,触发空指针异常。

修复后的发送Fragment代码

FirebaseRecyclerAdapter firebaseRecyclerAdapter =
    new FirebaseRecyclerAdapter<User, FindFriendsViewHolder>(options) {
  @Override
  protected void onBindViewHolder(@NonNull FindFriendsViewHolder holder, int position, @NonNull User model) {
    holder.setUserName(model.getName());
    Picasso.get().load(model.getImageURL()).placeholder(R.drawable.ic_baseline_person_24).into(holder.userImage);

    holder.mView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            String userid = getRef(holder.getBindingAdapterPosition()).getKey().toString();
            // 创建目标Fragment实例
            Fragment fragment= new AnotherUserFragment();

            Bundle args = new Bundle();
            args.putString("userid", userid);
            // 将参数绑定到目标Fragment
            fragment.setArguments(args);

            FragmentTransaction transaction = getActivity().getSupportFragmentManager().beginTransaction();
            transaction.replace(R.id.main_body, fragment);
            transaction.addToBackStack(null);
            transaction.commit();

        }
    });
  }

接收Fragment代码优化(增强稳定性)

建议在接收端增加空指针判断,避免其他场景下的异常:

Bundle args = getArguments();
if (args != null) {
    String receiverUserId = args.getString("userid");
    if (receiverUserId != null) {
        Toast.makeText(getActivity(), "your id: " + receiverUserId, Toast.LENGTH_SHORT).show();
    }
}

内容的提问来源于stack exchange,提问作者UserName

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 08:55:06