1. Nimm jetzt an unserem AGM - Gewinnspiel teil - Informationen zum M1, A2 und A8 findest Du hier, hier und hier!
  1. Unicate, 06.01.2012 #1
    Unicate

    Unicate Threadstarter Android-Experte

    Hallo alle zusammen!

    Wie ich in einem vorherigen Post bereits erwähnte bau ich eine Telefonkontaktsuche.
    Dazu habe ich einem EditText einen TextWatcher gegeben, welcher sich immer meldet wenn der Benutzer den Text in dem EditText verändert hat.
    Diesen String möchte ich dann zum suchen eines Kontaktes verwenden.
    Nun schreibt der Benutzer aber meist schneller als die Datenbank durchsucht werden kann.
    d.h.:

    Benutzer drückt: U
    Datenbank sucht...
    Benutzer drückt: N
    Datenbank sucht immer noch "U"
    Datenbank soll nun nach "UN" suchen


    Wie setz ich das geschickt um?
    Bisher hatte ich es in anderen Apps immer so gelößt, dass ich solange der erste Suchvorgang noch nicht beendet ist, keinen weiteren Starte. Das finde ich aber nicht sehr schön.
    Gibt es da keine bessere Lösung für?
     
  2. DieGoldeneMitte, 06.01.2012 #2
    DieGoldeneMitte

    DieGoldeneMitte Android-Lexikon

    Du könntest die Suche erst dann anschmeißen, wenn nach dem letzten Buchstaben etwas Zeit vergangen ist.
     
  3. Unicate, 06.01.2012 #3
    Unicate

    Unicate Threadstarter Android-Experte

    An wie lange denkst du da?
    1 Sekunde? Ist fast zu lang! Wie machen das andere Apps?
    Weniger als 1 Sekunde braucht man aber auch nicht zu nehmen, da das durchaus mal ne Sekunde dauern kann.
     
  4. JanF, 06.01.2012 #4
    JanF

    JanF Android-Experte

    Und wie isses, das Suchergebnis nur dann anzeigen zu lassen (bzw. weitere Ergebnisse), solange kein weitere Buchstabe bei der Suche hinzugekommen ist?
     
  5. DieGoldeneMitte, 06.01.2012 #5
    DieGoldeneMitte

    DieGoldeneMitte Android-Lexikon

    Ich hätte eher an ~500msec gedacht.

    Das mit der mehrfachen Suche würde ich durch Verwerfen des Ergebnis der alten lösen (wenn die DB da mitmacht).
    Jede Tasteneingabe wirft dann einen Thread wie folgt an:

    Code:
    public void run() {
      mCurrentSearch = this;
      Thread.sleep( 500 );
      if( this!=mCurrentSearch ) return;
      //suche ausführen
      if( this!=mCurrentSearch ) return;
      //treffer anzeigen
    }
    
     
  6. swordi, 06.01.2012 #6
    swordi

    swordi Gewerbliches Mitglied

    naja ich würde einfach vorm anzeigen des results dann abchecken, ob das aktuelle suchwort, das gleiche ist, wie das von dem ergebnis.

    wenn sich das wort geändert hat, verwerfen. wenn nicht, anzeigen.

    einen bereits gestarteten task kannst halt nur sehr aufwändig wieder abbrechen.

    hab obiges verhalten in einer app integriert und das funktioniert sehr gut
     
  7. Bobert, 06.01.2012 #7
    Bobert

    Bobert Erfahrener Benutzer

    Hallo,

    in welchen Feldern der Telefonkontaktsuche suchst Du und um wieviel Kontakte geht es?
    Was würdest Du von der Idee halten, alle Kontakte bzw. relevanten Felder beim Start der Activity zu laden und in eine z.B. List<KontakteObj> zu speichern, so dass Du diese Liste durchsuchen kannst? Damit sollten Dir Suchergebnisse nach Tastendruck schnell genug zur Verfügung stehen?!

    Gruß
    Bobert
     
  8. Unicate, 06.01.2012 #8
    Unicate

    Unicate Threadstarter Android-Experte

    @Bobert:
    Genau das mach ich gerade, das schien mir das vernünftigste.
    Danke trotzdem