Я пытаюсь интегрировать поиск в Firestore
коллекциях, используя буквы, которые я набрал EditText
. Я имею в виду, как я могу сделать это без каких-либо кнопок, просто поиск в реальном времени, то есть когда я набираю любые буквы в EditText
и результаты появляются в ListView
.
Мой класс, где я восстановил все записи из Firestore:
public class AllPlaces extends AppCompatActivity {
private EditText eName;
private ListView mList;
private FirebaseFirestore firestore = FirebaseFirestore.getInstance();
private CollectionReference reference = firestore.collection("Users");
private SearchAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_all_places);
mList = findViewById(R.id.listSearch);
eName = findViewById(R.id.editSearch);
reference.get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
@Override
public void onComplete(@NonNull Task<QuerySnapshot> task) {
List<SearchModel> names = new ArrayList<>();
if(task.isSuccessful()){
for(QueryDocumentSnapshot document : task.getResult()) {
SearchModel model = document.toObject(SearchModel.class);
names.add(model);
}
mList = findViewById(R.id.listSearch);
adapter = new SearchAdapter(AllPlaces.this, names);
mList.setAdapter(adapter);
}
}
});
}
}
UPDATE:
Я нашел это решение, но оно не работало правильно, когда я набираю какую-то букву - вся информация исчезает из ListView
:
eName.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
AllPlaces.this.adapter.getFilter().filter(s);
}
@Override
public void afterTextChanged(Editable s) {
}
});