Java 如何将数据从片段传递到适配器
现在,我试图将关键数据从片段传递到包含recyclerview的适配器 但问题是,在我的情况下,无法使用bundle或通过意图发送数据 我不知道如何将数据传递给它 这是我的片段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";
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);