Activity传数据至Adapter后字符串显示为null问题求助
RecyclerView Adapter成员变量赋值后为空的问题调试与解决
问题详情
已将数据从Activity传递至自定义RecyclerView Adapter,调试时确认传入Adapter构造函数的uniquesharedId参数存在正确数据,但执行this.uniquesharedIds = uniquesharedId;赋值后,成员变量uniquesharedIds显示为null,后续在onBindViewHolder中调用holder.Name.setText(uniquesharedIds)时显示空值。
相关代码
Activity的onCreate方法
myadapter = new Invite_Contributors_Adapter(contributorInviteList, getIntent().getStringExtra("uniquesharedId"));
Adapter完整代码
public class Invite_Contributors_Adapter extends RecyclerView.Adapter<Invite_Contributors_Adapter.myviewholder> { private ArrayList<Model_Invite_Contributors_List> model_invite_contributors_lists = new ArrayList<>(); FirebaseAuth mAuth; private FirebaseUser currentuser; private DatabaseReference UsersReference; Context context; String uniquesharedIds; private InviteContributorsInterface inviteContributorsInterface; public Invite_Contributors_Adapter() { } public void updateInviteList (ArrayList list) { model_invite_contributors_lists .clear(); model_invite_contributors_lists .addAll(list); notifyDataSetChanged(); } public Invite_Contributors_Adapter(ArrayList<Model_Invite_Contributors_List>model_invite_contributors_lists, String uniquesharedId) { this.model_invite_contributors_lists = model_invite_contributors_lists; this.uniquesharedIds = uniquesharedId; } @NonNull @Override public Invite_Contributors_Adapter.myviewholder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.row_layout_invite_contributors_list, parent, false); return new myviewholder(view); } @Override public void onBindViewHolder(@NonNull myviewholder holder, int position) { holder.setData(model_invite_contributors_lists.get(position)); mAuth = FirebaseAuth.getInstance(); holder.Name.setText(uniquesharedIds); } @Override public int getItemCount() { return model_invite_contributors_lists.size(); } static class myviewholder extends RecyclerView.ViewHolder implements DialogInterface.OnClickListener { TextView Name; CircleImageView profileImageView; public myviewholder(@NonNull View itemView) { super(itemView); Name = itemView.findViewById(R.id.contributor_name); profileImageView = itemView.findViewById(R.id.member_profile_picture); } @Override public void onClick(DialogInterface dialog, int which) { } public void setData(Model_Invite_Contributors_List model) { FirebaseUser currentuser; currentuser = FirebaseAuth.getInstance().getCurrentUser(); DatabaseReference NameRef = FirebaseDatabase.getInstance().getReference(Strings.UsersReference); NameRef.addValueEventListener(new ValueEventListener() { @Override public void onDataChange(@NonNull DataSnapshot dataSnapshot) { if (dataSnapshot.exists()) { // 隐藏当前用户的条目 if (currentuser.getUid().equals(model.getUser_Id())){ ViewGroup.LayoutParams params = itemView.getLayoutParams(); params.height = 0; itemView.setLayoutParams(params); } else { for(DataSnapshot ds : dataSnapshot.getChildren()) { itemView.setVisibility(View.VISIBLE); String profileImageString; profileImageString = model.getProfileimage(); Glide.with(profileImageView.getContext()) .load(profileImageString) .placeholder(R.drawable.circle_placeholder) .error(R.drawable.circle_placeholder) .into(profileImageView); } } } } @Override public void onCancelled(@NonNull DatabaseError databaseError) { } }); } } public void setInterface (Invite_Contributors_Adapter.InviteContributorsInterface inviteContributorsInterface) { this.inviteContributorsInterface = inviteContributorsInterface; } public interface InviteContributorsInterface{ } }
解决步骤
排查空构造函数调用
检查项目中是否存在其他地方通过空构造new Invite_Contributors_Adapter()实例化Adapter的情况。如果有,该实例的uniquesharedIds会是null,若后续将这个实例设置给RecyclerView,就会出现问题。确保所有Adapter实例都通过带参数的构造函数创建。添加日志确认赋值状态
在带参数的构造函数中添加日志,验证赋值后uniquesharedIds的状态:public Invite_Contributors_Adapter(ArrayList<Model_Invite_Contributors_List>model_invite_contributors_lists, String uniquesharedId) { this.model_invite_contributors_lists = model_invite_contributors_lists; this.uniquesharedIds = uniquesharedId; Log.d("AdapterDebug", "构造函数赋值后uniquesharedIds: " + this.uniquesharedIds); }同时在
onBindViewHolder中也添加日志:@Override public void onBindViewHolder(@NonNull myviewholder holder, int position) { holder.setData(model_invite_contributors_lists.get(position)); Log.d("AdapterDebug", "onBindViewHolder中uniquesharedIds: " + uniquesharedIds); holder.Name.setText(uniquesharedIds); }通过日志判断是赋值时就出现问题,还是后续被修改为null。
检查变量是否被意外覆盖
全局搜索Adapter中对uniquesharedIds的赋值操作,确认没有其他代码将其设置为null。优化Adapter初始化逻辑
将mAuth = FirebaseAuth.getInstance();移至Adapter的构造函数中,避免每次onBindViewHolder都重复初始化:public Invite_Contributors_Adapter(ArrayList<Model_Invite_Contributors_List>model_invite_contributors_lists, String uniquesharedId) { this.model_invite_contributors_lists = model_invite_contributors_lists; this.uniquesharedIds = uniquesharedId; this.mAuth = FirebaseAuth.getInstance(); }
内容的提问来源于stack exchange,提问作者greenTea
相关产品推荐
相关产品推荐

