[我可以解释为什么我尝试在RecyclerViewAdapter
中访问它时传递给我的Adapter
的参数之一为空吗?我一直在查看片段的生命周期,但似乎无法将导致它为null的原因缠住脑袋。在onCreateView()
中,我有:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_message, container, false);
mFirestore = FirebaseFirestore.getInstance();
String user_id = mAuth.getCurrentUser().getUid();;
mUsersListView = view.findViewById(R.id.users_list);
usersList = new ArrayList<>();
usersRecyclerAdapter = new UsersRecyclerAdapter(container.getContext(), usersList, me);
mUsersListView.setHasFixedSize(true);
mUsersListView.setLayoutManager(new LinearLayoutManager(container.getContext()));
mUsersListView.setAdapter(usersRecyclerAdapter);
return view;
}
并且在onStart()
中:
@Override
public void onStart() {
super.onStart();
usersList.clear();
mFirestore.collection("Users").addSnapshotListener(getActivity(), (documentSnapshots, e) -> {
for (DocumentChange documentChange : documentSnapshots.getDocumentChanges()) {
if (documentChange.getType() == DocumentChange.Type.ADDED) {
String user_id = documentChange.getDocument().getId();
if (mAuth.getCurrentUser().getUid().matches(user_id)) {
me = documentChange.getDocument().toObject(Users.class).withId(user_id);
System.out.println(me.getName()); //prints out a name
usersRecyclerAdapter.notifyDataSetChanged();
} else {
Users users = documentChange.getDocument().toObject(Users.class).withId(user_id);
usersList.add(users);
usersRecyclerAdapter.notifyDataSetChanged();
}
}
}
});
}
我的适配器类看起来像这样
public class UsersRecyclerAdapter extends RecyclerView.Adapter<UsersRecyclerAdapter.ViewHolder> {
private List<Users> usersList;
private Context context;
private Users me;
public UsersRecyclerAdapter(Context context, List<Users> usersList, Users me) {
this.usersList = usersList;
this.context = context;
this.me = me;
System.out.println(me.getName()); //this outputs null
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
//
}
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
//
}
}
我想保留对me
对象的引用,并将其传递给我的适配器。但是,当我尝试在那里访问它时,它会触发一个NullPointerException
。该列表很好,但是可以访问。怎么会来?
因此,在评论中进行讨论之后,帮助创建一种方法来更新适配器中的me
变量: