我一直在努力让我的 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);
}
}
}