提问者:小点点

如何将数据从一个片段传递到另一个通过回收视图?


单击RecyclerView项目时,我需要将用户ID从Firebase从一个片段传递到另一个片段。我尝试通过Bundle执行此操作,但收到以下错误:

java. lang.NullPointerException:尝试在空对象引用上调用虚方法'java.lang.Object android.os.Bundle.get(java.lang.String)'

发送片段:

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= new AnotherUserFragment();

            Bundle args = new Bundle();
            args.putString("userid", userid);

            AddUserFragment addUserFragment = new AddUserFragment();
            addUserFragment.setArguments(args);

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

        }
    });
  }

接收片段:

Bundle args = getArguments();
String receiverUserId = args.get("userid").toString();
Toast.makeText(getActivity(), "your id: " + receiverUserId, Toast.LENGTH_SHORT).show();

共1个答案

匿名用户

您正在为不同的片段设置参数,而不是导航片段

String userid = getRef(holder.getBindingAdapterPosition()).getKey().toString();
//you are navigating to this fragment, so set arguments to this
Fragment fragment = new AnotherUserFragment();

Bundle args = new Bundle();
args.putString("userid", userid);

AddUserFragment addUserFragment = new AddUserFragment();
addUserFragment.setArguments(args);

//add this line to set arguments for the actual target fragment
fragment.setArguments(args);

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