Ich habe eine Firebase-Datenbank, die Daten in einer Listview anzeigen können. Alle Daten sind in Objekten enthalten, die Daten enthalten. Ich möchte in der Lage sein, Beispiel "Lars" in die Suchleiste zu schreiben, und dann muss die Listview nur die Objekte aktualisieren, die diese Zeichenfolge enthalten, und wenn ich alles aus der Suchleiste lösche, sollte es alles wieder anzeigen. Die erste for-Schleife funktioniert, und die zweite for-Schleife ist mein Versuch, die Daten zu suchen. My Firebase Struktur sieht wie folgt aus: Suchen von Daten aus Firebase mit Listview in Android
private DatabaseReference mDatabaseReference;
private ListView mUserList;
private SearchView searchModule;
private ArrayList<String> mUsernames = new ArrayList<>();
private ArrayList<String> filteredUsernames = new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_existing_customer);
mDatabaseReference = FirebaseDatabase.getInstance().getReference("Buyers");
mUserList = (ListView) findViewById(R.id.UserListView);
searchModule = (SearchView) findViewById(R.id.SearchTab);
final ArrayAdapter<String> arrayAdapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, mUsernames);
final ArrayAdapter<String> filteredArrayAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, filteredUsernames);
mUserList.setAdapter(arrayAdapter);
mDatabaseReference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot childSnapshot : dataSnapshot.getChildren()) {
Map<String, String> map = (Map<String, String>) childSnapshot.getValue();
Log.v("YourValue,","Map value is:" +map.toString());
Log.d("TAG", "onChildAdded:" + dataSnapshot.getKey());
Buyers buyerList = new Buyers(map);
mUsernames.add(buyerList.getData());
}
CharSequence searchValue = (CharSequence) searchModule;
arrayAdapter.getFilter().filter(searchValue);
arrayAdapter.notifyDataSetChanged();
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
Ich habe versucht, Ihren Code, der das ListView immer noch wie vorgesehen gibt, aber es macht mich nicht in der Lage, nach etwas zu suchen. Irgendwelche Ideen? – Michael
Verpasste die Suche Teil, bearbeitet, um es hinzuzufügen. Grundsätzlich sollten Sie in der Lage sein, einen Listener zu verwenden, um Änderungen zu hören und den Filter zu aktualisieren. Ich habe den Code nicht getestet, trotzdem sollte es funktionieren. Außerdem ist notifyDataSetChange möglicherweise nicht erforderlich, da Sie tatsächlich einen Filter auf den Adapter anwenden und die Datenmenge nicht ändern. – merterpam