1. Nimm jetzt an unserem Uhans - 3. ADVENT - Gewinnspiel teil - Alle Informationen findest Du hier!

Generelle Frage zu Databinding

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von quiddix, 17.03.2010.

  1. quiddix, 17.03.2010 #1
    quiddix

    quiddix Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    63
    Erhaltene Danke:
    1
    Registriert seit:
    09.02.2010
    Hallo,

    ich erstelle mir momentan meine eigene Applikation und stehe nun vor dem Anbinden der Benutzeroberfläche an die Datenbank bzw. am Schreiben der Datenbankabfragen.

    Da ich momentan viel mit Eclipse RCP zu tun habe, ist meine Denkweise stark darauf fixiert und es fällt mir manchmal schwer mit den Eigenheiten von Android zurechtzukommen.

    Um meine Frage zu verdeutlichen, möchte ich zunächst ein Beispiel in normalne Java (und Eclipse RCP) geben, das ich ähnlich für meine Android Applikation umsetzten möchte.

    Dabei möchte ich Daten aus der Datenbank in einer Liste darstellen, und beim klicken eines Items die Daten dieses Items in einem separaten View bearbeiten.

    ---- Beispiel Vorgehensweise in Standard-Java ----
    1. Ich lade mir die Daten aus der Datenbank
    2. Ich definiere mir einen Contentprovider für die Liste
    3. Ich definiere mir einen Labelprovider für die Liste
    4. Ich setzte die geladenen Daten als Input für die Liste
    5. Ich füge einen selectionListener hinzu und hole mir das selektierte Objekt

    ---- Beispiel Vorgehensweise in Android Applikation ----
    1. Ich lade mir die Daten aus der Datenbank
    2. Ich definiere mir einen Adapter
    3. Ich übergebe dem Adapter bestimmte Daten, die ich in der Liste anzeigen will
    4. Ich füge einen onItemClickListener zur Liste hinzu

    Und genau jetzt kommt mein Problem. Ich bekomme über den Adapter nicht das selektierte Element / Objekt, sondern z.B. nur den Anzeigetext.

    Habe ich z.B. den Namen der Klasse Produkt zuvor dem Adapter übergeben, so habe ich nun nur den Namen zur Verfügung und müsste jetzt eine erneute Abfrage mit dem Namen starten, welche zudem mehrere Ergebnisse liefern könnte.

    Es wäre also gut, wenn ich bei der selektion die Id des Objekts zur Verfügung hätte, sodass ich es eindeutig identifizieren könnte.

    Hat jemand eine Idee wie ich das macht? Leider finde ich dazu keine Beispiele bzw. nur Beispiele die zu simpel sind um diesen Punkt zu beachten.

    Danke
     
  2. Shinigami, 17.03.2010 #2
    Shinigami

    Shinigami Fortgeschrittenes Mitglied

    Beiträge:
    436
    Erhaltene Danke:
    69
    Registriert seit:
    08.04.2009
    Hi,

    lobenswert ausführlicher Post um Deine Problematik zu verdeutlichen.

    Welchen Adapter zum Binden der Daten an die Liste verwendest Du denn?

    Ich kenn's so:
    Verwendet man z.B. den SimpleCursorAdapter muss man dem Adapter einen Cursor übergeben in dem ein Datenfeld namens _id enthalten, welcher das Schlüsselfeld der Tabelle sein sollte. Implementiert man nun den onItemClick-Methode wird diese _id als Parameter (long id) mit übergeben und man hat seinen Datensatz eindeutig identifiziert. Oder liege ich komplett falsch?

    Gruß,
    Shini
     
  3. quiddix, 17.03.2010 #3
    quiddix

    quiddix Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    63
    Erhaltene Danke:
    1
    Registriert seit:
    09.02.2010
    Hi,

    und ich dachte schon ich schreibe wieder zu ausführlich und keine hat dann Lust meinen Beitrag zu lesen.

    Ich habe gestern erste Datenbankabfragen für Spinner geschrieben. Nachdem ich dort auch auf dieses Problem gestoßen bin, habe ich durch Recherchen im Internet auch den SimpleCursorAdapter gefunden.

    Leider konnte ich dort noch nicht testen, was ich bei einem onItemClicked event zurückbekomme, ich denke jedoch dass es hier kein Problem sein sollte die ID ausfindig zu machen.

    Bei der Liste habe ich auf eine "Spezialimplementierung" die ich im Internet gefunden habe zurückgegriffen.

    Dort wird ein eigener Adapter (SeparatedListAdapter) aus verschiedenen Adaptern Kombiniert um eine Liste mit Kategorien zu erhalten: Jeff Sharkey Separating Lists with Headers in Android 0.9

    Deshalb werde ich hier wohl keinen SimpleCursorAdapter verwenden können.

    Meine Überlegung ist nun, in dem SpeperatedListAdapter eine Methode zum Hinzufügen von Listeeinträgen zu erstellen. Diese Methode bekommt den Listeneintrag und dessen ID als Parameter. Also z.B.:

    addListItem(int id, String lineToAdd);

    Intern füge ich das dann zum Adapter hinzu und speichere mir das ganze in einer HashMap. Wenn ich nun einen onListItemClicked Event fang, so kann ich in der HashMap die Ursprüngliche id des Listeneintrags erfahren und habe diesen identifiziert.

    Leider bin ich mit dieser Idee nicht ganz zufrieden, da so einige Fehler entstehen könnte (Einträge mit gleichen Namen etc.). Falls jemand für diesen Adapter oder allgemein deshalb eine andere Idee hat (best practice), wäre ich Ihm sehr dankbar.

    Gruß
     

Diese Seite empfehlen