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

Datenbank Listview mit Checkbox

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von pieradnHero, 16.11.2011.

  1. pieradnHero, 16.11.2011 #1
    pieradnHero

    pieradnHero Threadstarter Neuer Benutzer

    Beiträge:
    4
    Erhaltene Danke:
    0
    Registriert seit:
    16.11.2011
    Hi,

    ich bin blutiger Anfänger was Programmieren und insbesondere Android-Programmierung betrifft. Habe durch viel Lesen, probieren usw. schon einiges zum laufen gebracht. Nur leider hänge ich nun seit Tagen an einem Problem und weis einfach nicht mehr weiter.

    Und zwar habe ich eine Datenbank mit mehreren Spalten. Diese Datenbank möchte ich in einer Liste ausgeben. Hierzu habe ich ein Layout mit einer ListView und ein Layout für die Zeilen in der ListView erstellt. Das Zeilen Layout enthält eine Checkbox und zwei Textview.

    Nach ewigem rumprobieren habe ich es endlich geschafft das meine Datenbankeinträge in der Liste korrekt angezeigt werden.
    Hierzu verwende ich folgenden Code:

    PHP:
    Cursor c datenbank.rawQuery("SELECT _id, name, sort FROM " database_table ";"null);
    startManagingCursor(c);
            
            
    SimpleCursorAdapter adapter = new SimpleCursorAdapter(this,
    R.layout.list_row,c,new String[] { "_id""name""sort" }, new int[] { 
    R.id.ListRowText1R.id.ListRowText2 });
            

            
    adapter.setViewBinder(new ViewBinder() {
                @
    Override
                
    public boolean setViewValue(View viewCursor theCursorint columnname) {
                        switch(
    view.getId()) {
                        case 
    R.id.ListRowText1:
                            final 
    String ColumnName theCursor.getString(1);
                            ((
    TextView)view).setText(ColumnName);
                            return 
    true;
                        case 
    R.id.ListRowText2:
                            final 
    String ColumnAge theCursor.getString(2);
                            ((
    TextView)view).setText(ColumnAge);
                            return 
    true;
                        }
                    
                return 
    false;
                }
                
            });
            
    setListAdapter(adapter);
    Das funktioniert wie gesagt super. Nun sieht mein Zeilenlayout folgendermaßen aus: Checkbox - Textview - Textview.
    Beide Textviews werden durch den obigen Code erfolgreich "gefüllt".

    Mein Problem ist nun, wie schaffe ich es, das wenn ich die Checkbox anklicke, eine Aktion ausgeführt wird.
    Gedacht habe ich mir, das beim checken der Checkbox automatisch die Zahl 1 in meine Datenbankspalte Status geschrieben wird. Wird die Checkbox ungecheckt wird 0 reingeschrieben.

    Habe bereits sehr viele Tutorials durchgesucht allerdings war nie was passendes dabei. Alle Beispiele die mein Problem behandeln, waren mit Arrays anstatt mit einer Datenbank oder nicht passend genug. Kennt einer ein Tutorial oder kann mir ein Codebeispiel schreiben wie ich mein Problem am besten Lösen kann? Bitte so einfach wie möglich erklären, da ich ganz neu im Bereich Programmieren bin :)

    Vielen Dank schonmal für eure Hilfe

    Gruß
     
  2. Tom299, 17.11.2011 #2
    Tom299

    Tom299 Android-Experte

    Beiträge:
    602
    Erhaltene Danke:
    120
    Registriert seit:
    31.08.2011
    Also ich persönlich ziehe es vor, eine eigene Adapter-Klasse zu schreiben, welche ich von ArrayAdapter ableite.

    Darin wird getView() überschrieben, um die entsprechenden Views mit Daten zu füllen (in deinem Fall die CheckBox und die beiden TextViews). Auch kann man hier Listener registrieren, wie z.B. ein OnFocusChange auf nen EditText oder in deinem Fall ein OnCheckedChangeListener auf die CheckBox und entsprechend darauf reagieren.

    Die Daten lese ich dann vom Cursor in eine ArrayList, kann den Cursor schließen und hab alle Daten immer in meiner ArrayList verfügbar.

    Zu meinem Array-Adapter erstelle ich mir immer noch eine Datenklasse, die ich übergebe. Somit kann ich immer auf meine Methoden zugreifen, um Werte zu lesen oder zu speichern.

    Alles in allem recht einfach, wenn man es ein paar mal gemacht hat :smile:
     
  3. pieradnHero, 17.11.2011 #3
    pieradnHero

    pieradnHero Threadstarter Neuer Benutzer

    Beiträge:
    4
    Erhaltene Danke:
    0
    Registriert seit:
    16.11.2011
    Gibts da evtl. ein gutes Tutorial oder ein Beispiel was dieses Adapter selber schreiben erklärt?

    Hab schon öfters gelesen das man mit einer eigenen Adapterklasse mehr erfolg hat, nur leider sind dafür meine Kenntnisse wohl noch etwas zu wenig :)
     
  4. swordi, 17.11.2011 #4
    swordi

    swordi Gewerbliches Mitglied

    Beiträge:
    3,389
    Erhaltene Danke:
    441
    Registriert seit:
    09.05.2009
    einfach bei google nach custom adapter suchen. dazu gibts genug
     

Diese Seite empfehlen