Suche in Fragments

  • Antworten:7
gr8
  • Forum-Beiträge: 14

23.03.2014, 22:43:10 via Website

Hallo,

ich habe eine App bei der es bis dato nur eine Activity gibt, die einen NavigationDrawer beinhaltet und handled. Im Rahmen von zwei verschiedenen Fragments soll eine Suche möglich sein. Diese Fragments sind im Prinzip (custom) ListViews, die jedoch beide unterschiedlich dargestellt werden.
Die Suche soll dabei ähnlich wie bei Google aussehen - das heißt, es ist eine Live-Suche, bei der gefunden Ergebnisse gleich angezeigt werden.

Mein aktueller Stand: Das SearchView-Icon in der ActionBar wird angezeigt:

1@Override
2 public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
3 super.onCreateOptionsMenu(menu, inflater);
4 menu.clear();
5 inflater.inflate(R.menu.fragment1_actions, menu);
6 MenuItem searchItem = menu.findItem(R.id.action_search);
7 searchView = (SearchView) searchItem.getActionView();
8 }

Wie kann ich nun implementieren, sodass beim Klick auf das Search-Icon (die Lupe) ein Textfeld zur Eingabe des Suchbegriffs (nach dem standardmäßigen Verhalten von Android) erscheint, und die gefunden Einträge in der jeweils customized ListView angezeigt/aktualisiert werden?

Vielen Dank!

Antworten
Mac Systems
  • Forum-Beiträge: 1.727

24.03.2014, 00:38:05 via Website

Das ist ein SearchView den du suchst.

Windmate HD, See you @ IO 14 , Worked on Wundercar, Glass V3, LG G Watch, Moto 360, Android TV

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

24.03.2014, 05:35:33 via App

Wie sind denn die zu suchenden Daten gespeichert?

— geändert am 24.03.2014, 05:35:43

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
gr8
  • Forum-Beiträge: 14

24.03.2014, 16:01:27 via Website

Pascal P.
Wie sind denn die zu suchenden Daten gespeichert?

Die Daten hol ich mir aus der DB (sqlite ohne ORM) - es wird dabei eine Liste von Person-Objekte geliefert (d.h. es existiert eine Tabelle person). Inwiefern ist das in diesem Rahmen genau relevant?

danke!

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

24.03.2014, 16:34:37 via Website

Du musst halt die Suchergebnisse in einer LV präsentieren. Wenn das in einer DB ist, dann wist das suchen ja kein Problem.

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Mac Systems
  • Forum-Beiträge: 1.727

24.03.2014, 16:38:46 via Website

Der rest ist relativ trivial, du musst nur einen Loader schreiben der die eingaben mittels ContentResolver sucht.

Windmate HD, See you @ IO 14 , Worked on Wundercar, Glass V3, LG G Watch, Moto 360, Android TV

Antworten
gr8
  • Forum-Beiträge: 14

24.03.2014, 22:53:41 via Website

versteh ich das richtig:
-> SearchView.OnQueryTextListener implementieren. Dabei in der onQueryTextChange den Loader restarten.
-> in der onCreateLoader-Methode einen CursorLoader mit entsprechender WHERE-Clause zurück geben.

Was ich mich dabei jedoch frage:
Dafür benötige ich ja einen ContentProvider (für den CursorLoader, oder?) - ich habe jedoch für die ListView einen ListAdapter. Brauch ich diesen Adapter dann überhaupt noch, wenn ich einen ContentProvider auch habe?

— geändert am 24.03.2014, 22:56:33

Antworten
Mac Systems
  • Forum-Beiträge: 1.727

25.03.2014, 14:19:33 via Website

Wie du deine Daten auslieferst ist egal, dazu sagt die Loader API garnix. Cursor haben halt den scharm das sie per Notification einfach mitbekommen das sich was verändert hat und das UI refreshed sich automatisch (also man muss nicht von hinten durchs knie schiessen).

Wenn du Pojos hast kannst du genauso die als List liefern.

Es könnte sogar gehen im ListAdapter den Cursor so zu benutzen das du einen eigenden Cursor schreibst und der ListAdapter merkt davon halt nix.
Ich hab es selbst noch nicht gemacht, ein MatrixCursor könnte aber dafür geeignet sein. Die Docu dazu liest sich zumindest so. Evtl müssel deine Pojos dann parcleable sein ....

Windmate HD, See you @ IO 14 , Worked on Wundercar, Glass V3, LG G Watch, Moto 360, Android TV

Antworten