现在我正在尝试将关键数据从片段传递到包含recyclerview的适配器 但是问题是我无法使用捆绑软件或通过意图发送数据 我很困惑如何传递数据。
这是我的片段
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) {
}
});
}
}
我想从上面发送“ id”数据
String id = ds.getKey();
这是我的适配器
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) {
}
});
}
}
我已经尝试使用Bundle,但是它无法使用... 我该如何发送这些数据?
答案 0 :(得分:1)
在适配器类中创建一个公共函数和一个私有变量
Int id;
public void setId(int id) {
this.id = id;
}
现在通过片段设置ID
petchingLoungeAdapter = new PetchingLoungeAdapter(getContext(), userList);
petchingLoungeAdapter.setId(/* set ID here */) ;
recyclerView.setAdapter(petchingLoungeAdapter);
答案 1 :(得分:0)
您可以像这样编写适配器类的构造函数
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);