如何通过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
相关产品推荐
相关产品推荐

