Recyclerview 不会在数据集更改时更新

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

我一直在努力让我的 recyclerview 在搜索活动中工作。我只是对我的其他 recyclerviews 做了同样的事情,这些 recyclerviews 工作得很好,但我只是不明白为什么它不更新。 当我输入已知名称时,它确实将用户完美地添加到用户列表中,但是当我通知适配器列表已更改时,它不会显示在 recyclerview 中...

可能这是一个愚蠢的错误,但我就是想不通,非常感谢所有帮助!

活动:

public class SearchLeaderActivity extends AppCompatActivity {
    ImageView backBtn;
    SearchView searchView;
    RecyclerView recyclerView;
    SearchAdapter adapter;
    private CollectionReference collectionRef;
    List<UserModel> users;
    private FirebaseFirestore db;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_search_leader);

        init();

        users = new ArrayList<>();
        adapter = new SearchAdapter(users, this);
        recyclerView.setAdapter(adapter);

        clicklistener();
    }
    private void init(){
        backBtn = findViewById(R.id.backHomeBtn);
        searchView = findViewById(R.id.search_bar);
        recyclerView = findViewById(R.id.searchRecycler);
        searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
            @Override
            public boolean onQueryTextSubmit(String query) {
                searchUsers(query);
                return false;
            }

            @Override
            public boolean onQueryTextChange(String newText) {
                return false;
            }
        });
    }
    private void clicklistener(){
        backBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                finish();
            }
        });
    }
    private void searchUsers(String query){
        users.clear();
        recyclerView.setHasFixedSize(true);
        db = FirebaseFirestore.getInstance();
        Query searchQuery = db.collection("users").whereEqualTo("firstname", query);
        searchQuery.get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
            @Override
            public void onComplete(@NonNull Task<QuerySnapshot> task) {
                if (task.isSuccessful()) {
                    
                    for (QueryDocumentSnapshot document : task.getResult()) {
                        UserModel user = document.toObject(UserModel.class);
                        users.add(user);
                    }
                    adapter.notifyDataSetChanged();
                    if (users.isEmpty()){
                        Toast.makeText(SearchLeaderActivity.this, "Geen gebruiker gevonden, gebruik enkel voornaam", Toast.LENGTH_SHORT).show();
                    }
                }
            }
        });
    }
}

对于我的适配器,我有:

public class SearchAdapter extends RecyclerView.Adapter<SearchAdapter.SearchViewHolder> {

    List<UserModel> userList;

    Context context;

    public SearchAdapter(List<UserModel> userList, Context context) {
        this.userList = userList;
        this.context = context;
    }

    @NonNull
    @Override
    public SearchAdapter.SearchViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {

        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.personlist2, parent, false);

        return new SearchAdapter.SearchViewHolder(view);
    }

    @Override
    public void onBindViewHolder(@NonNull SearchAdapter.SearchViewHolder holder, int position) {

        String firstname = userList.get(position).getFirstname();

        holder.nameTextview.setText(firstname);
    }

    @Override
    public int getItemCount() {
        return 0;
    }

    static class SearchViewHolder extends RecyclerView.ViewHolder{

        TextView nameTextview;
        RelativeLayout layout;

        public SearchViewHolder(@NonNull View itemView) {
            super(itemView);

            nameTextview = itemView.findViewById(R.id.textfield);
            layout = itemView.findViewById(R.id.goToPerson);

        }
    }
}
java android-studio android-recyclerview android-adapter
© www.soinside.com 2019 - 2024. All rights reserved.