构造函数中的RecyclerView适配器空参数

问题描述 投票:1回答:1

[我可以解释为什么我尝试在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。该列表很好,但是可以访问。怎么会来?

java android nullpointerexception
1个回答
0
投票

因此,在评论中进行讨论之后,帮助创建一种方法来更新适配器中的me变量:

© www.soinside.com 2019 - 2024. All rights reserved.