Java 如何将数据从片段传递到适配器

Java 如何将数据从片段传递到适配器,java,android,firebase,Java,Android,Firebase,现在,我试图将关键数据从片段传递到包含recyclerview的适配器 但问题是,在我的情况下,无法使用bundle或通过意图发送数据 我不知道如何将数据传递给它 这是我的片段 package com.example.together.fragment; public class PetchingLoungeFragment extends Fragment { private static final String TAG = "PetFirendsFragment";

现在,我试图将关键数据从片段传递到包含recyclerview的适配器 但问题是,在我的情况下,无法使用bundle或通过意图发送数据 我不知道如何将数据传递给它

这是我的片段

package com.example.together.fragment;




public class PetchingLoungeFragment extends Fragment {

    private static final String TAG = "PetFirendsFragment";

    RecyclerView recyclerView;
    PetchingLoungeAdapter petchingLoungeAdapter;
    List<User> userList;
    FirebaseUser firebaseUser;
    List<String> idList = new ArrayList<>();
    public String petKey;




    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
    {


        View view =  inflater.inflate(R.layout.fragment_petching_lounge, container, false);

        recyclerView = view.findViewById(R.id.recycler_view);
        recyclerView.setHasFixedSize(true);


        firebaseUser = FirebaseAuth.getInstance().getCurrentUser();
        DatabaseReference reference = FirebaseDatabase.getInstance().getReference("Lounge").child("PetchingBunyang").child(firebaseUser.getUid()).child("PetId");


        reference.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {

                    for (DataSnapshot ds : dataSnapshot.getChildren())
                    {
                        String id = ds.getKey();

                        PetchingLoungeFragment petchingLoungeFragment = new PetchingLoungeFragment(); // Fragment 생성
                        Bundle bundle = new Bundle(1); // 파라미터는 전달할 데이터 개수
                        bundle.putString("id", id); // key , value
                        petchingLoungeFragment.setArguments(bundle);




                        DatabaseReference reference1 =
                                FirebaseDatabase.getInstance().getReference( "Lounge").child("PetchingBunyang").child(firebaseUser.getUid()).child("PetId").child(id).child("Requestor");

                        reference1.addValueEventListener(new ValueEventListener() {
                            @Override
                            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                                idList.clear();
                                for (DataSnapshot snapshot : dataSnapshot.getChildren())
                                {
                                    idList.add(snapshot.getKey());

                                }

                                showUsers();

                            }

                            @Override
                            public void onCancelled(@NonNull DatabaseError databaseError) {

                            }
                        });

                    }
            }

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {
                Log.d(TAG, "펫키에러");
            }
        });


        Log.d(TAG, "하마: "+petKey);
        LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getContext());
        recyclerView.setLayoutManager(linearLayoutManager);
        userList = new ArrayList<>();
        petchingLoungeAdapter = new PetchingLoungeAdapter(getContext(), userList);
        recyclerView.setAdapter(petchingLoungeAdapter);



        return view;

    }




    private void showUsers(){
        DatabaseReference reference = FirebaseDatabase.getInstance().getReference("Users");
        reference.addListenerForSingleValueEvent(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                userList.clear();
                for (DataSnapshot snapshot : dataSnapshot.getChildren()){
                    User user = snapshot.getValue(User.class);
                    for (String id : idList){
                        if (user.getId().equals(id)){
                            userList.add(user);
                        }
                    }
                }
                Collections.reverse(userList);
                petchingLoungeAdapter.notifyDataSetChanged();
            }

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {

            }
        });
    }




}





这是我的适配器

package com.example.together.adapter;

public class PetchingLoungeAdapter extends RecyclerView.Adapter<PetchingLoungeAdapter.MyViewHolder> {


    private static final String TAG = "PetchingBunyangAdapter";

    FirebaseUser firebaseUser;
    DatabaseReference reference;

    Context mContext;
    List<User> mUser;

    public PetchingLoungeAdapter(Context mContext, List<User> mUser)
    {
        this.mContext = mContext;
        this.mUser = mUser;
    }



    @NonNull
    @Override
    public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {



        View view = LayoutInflater.from(mContext).inflate(R.layout.list_petching_lounge, parent, false);
        return new PetchingLoungeAdapter.MyViewHolder(view);

    }

    @Override
    public void onBindViewHolder(MyViewHolder viewHolder, int position)
    {

        final User user = mUser.get(position);
        user.getId();

        Log.d(TAG, "빼오냥"+user.getId());

        getRequestorUserInfo(mUser.get(position).getId(), viewHolder.img_requestor , viewHolder.requestor_name);



        viewHolder.img_requestor.setOnClickListener(new View.OnClickListener()
        {
            @Override
            public void onClick(View v)
            {

                Intent intent = new Intent(v.getContext(), PetchingLoungeDetailInfoActivity.class);

                intent.putExtra("requester_name",mUser.get(position).getFullname());
                intent.putExtra("requester_img", mUser.get(position).getImageurl());
                intent.putExtra("requester_intro", mUser.get(position).getBio());
                // intent.putExtra("requester_pet_id",mUser.get(position).getUid)

                mContext.startActivity(intent);

            }
        });

    }

    @Override
    public int getItemCount()
    {
        return mUser.size();
                //mPetchingLounge.size();
    }



    public class MyViewHolder extends RecyclerView.ViewHolder
    {

        public Button allow, refuse;
        public ImageView img_requestor;
        public TextView requestor_name;

        public MyViewHolder(View itemView)
        {
            super(itemView);

            img_requestor = itemView.findViewById(R.id.img_requestor);

            allow = itemView.findViewById(R.id.allow);
            refuse = itemView.findViewById(R.id.refuse);

            requestor_name = itemView.findViewById(R.id.requestor_name);

        }
    }



    // 펫 정보 이름, 나이, 견종, 성별,
    private void getRequestorUserInfo(String userid, final ImageView img_requestor, final TextView requestor_name)
    {

        firebaseUser = FirebaseAuth.getInstance().getCurrentUser();

        DatabaseReference reference = FirebaseDatabase.getInstance().getReference("Users").child(userid);

        reference.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                User user = dataSnapshot.getValue(User.class);

                Glide.with(mContext).load(user.getImageurl()).into(img_requestor);

                requestor_name.setText(user.getUsername());
            }

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {

            }
        });

    }



}
package com.example.together.adapter;
公共类PetchingLoungLeadapter扩展了RecyclerView.Adapter{
私有静态最终字符串标记=“PetchingBunyangAdapter”;
FirebaseUser FirebaseUser;
数据库参考;
语境;
列表库;
公共PetchingLoungHeadapter(上下文mContext,列表mUser)
{
this.mContext=mContext;
this.mUser=mUser;
}
@非空
@凌驾
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup父级,int-viewType){
视图=布局更平坦。从(mContext)。充气(R.layout.list\u petching\u lounge,parent,false);
返回新的PetchingLoungeAdapter.MyViewHolder(视图);
}
@凌驾
BindViewHolder上的公共无效(MyViewHolder viewHolder,int位置)
{
最终用户=mUser.get(位置);
getId();
Log.d(标记,“빼오냥"+getId());
getRequestorUserInfo(mUser.get(position.getId(),viewHolder.img_requestor,viewHolder.requestor_name);
viewHolder.img_requestor.setOnClickListener(新视图.OnClickListener()
{
@凌驾
公共void onClick(视图v)
{
Intent Intent=new Intent(v.getContext(),petchingloungedetailinfactivity.class);
intent.putExtra(“请求者名称”,mUser.get(position.getFullname());
intent.putExtra(“requester\u img”,mUser.get(position.getImageurl());
intent.putExtra(“requester_intro”,mUser.get(position.getBio());
//intent.putExtra(“请求者\宠物\ id”,mUser.get(position.getUid)
mContext.startActivity(意图);
}
});
}
@凌驾
public int getItemCount()
{
返回mUser.size();
//mPetchingLounge.size();
}
公共类MyViewHolder扩展了RecyclerView.ViewHolder
{
公共按钮允许、拒绝;
公共图像视图img_请求者;
公共文本视图请求者名称;
公共MyViewHolder(查看项目视图)
{
超级(项目视图);
img_requestor=itemView.findviewbyd(R.id.img_requestor);
allow=itemView.findviewbyd(R.id.allow);
拒绝=itemView.findViewById(R.id.Reject);
requestor_name=itemView.findviewbyd(R.id.requestor_name);
}
}
// 펫 정보 이름, 나이, 견종, 성별,
私有void getRequestorUserInfo(字符串用户ID、最终图像视图img\u请求者、最终文本视图请求者\u名称)
{
firebaseUser=FirebaseAuth.getInstance().getCurrentUser();
DatabaseReference=FirebaseDatabase.getInstance().getReference(“用户”).child(用户ID);
addValueEventListener(新的ValueEventListener(){
@凌驾
public void onDataChange(@NonNull DataSnapshot DataSnapshot){
User=dataSnapshot.getValue(User.class);
Glide.with(mContext).load(user.getImageurl())到(img_请求者)中;
请求者_name.setText(user.getUsername());
}
@凌驾
已取消的公共void(@NonNull DatabaseError DatabaseError){
}
});
}
}
我已经尝试使用Bundle,但它无法使用它。。。
如何发送该数据?

在适配器类中创建一个公共函数和一个私有变量

Int id;

public void setId(int id) {
    this.id = id;
} 
现在通过片段设置ID

    petchingLoungeAdapter = new PetchingLoungeAdapter(getContext(), userList);
    petchingLoungeAdapter.setId(/* set ID here */) ;
    recyclerView.setAdapter(petchingLoungeAdapter);

您可以这样编写适配器类的构造函数

       Context mContext;
        List<User> mUser;
          String id;

        public PetchingLoungeAdapter(Context mContext, List<User> mUser, String id)
        {
            this.mContext = mContext;
            this.mUser = mUser;
             this.id=id;
        }

您只需将数据传递给适配器的构造函数。在适配器中创建一个变量并创建一个函数,通过它发送ID?构造函数中的加载项数据不是解决方案,因为数据可能会随时间而变化。您只需在适配器中添加一个方法并将数据作为参数传递,然后使用适配器中的数据并调用notifyDatasetChanged()在该方法中,每次数据都不会被传递。如果创建适配器的新实例,则会受到影响。
       Context mContext;
        List<User> mUser;
          String id;

        public PetchingLoungeAdapter(Context mContext, List<User> mUser, String id)
        {
            this.mContext = mContext;
            this.mUser = mUser;
             this.id=id;
        }
petchingLoungeAdapter = new PetchingLoungeAdapter(getContext(), userList,id);// pass the id here ( ds.getKey() ).
        recyclerView.setAdapter(petchingLoungeAdapter);