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

Datenbank und ListView

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von StefMa, 02.07.2012.

  1. StefMa, 02.07.2012 #1
    StefMa

    StefMa Threadstarter Gewerbliches Mitglied

    Beiträge:
    2,054
    Erhaltene Danke:
    413
    Registriert seit:
    16.10.2010
    Hi,

    ich habe eine Datenbank die sieht so aus:
    id, telefonnummer, text, uhrzeit [..]

    In einem ListView gebe ich die Telefonnummer mit der Uhrzeit aus. Einfach hintereinander via:
    Code:
    		ListView lv = (ListView) findViewById(R.id.loglistview);
    	    
    	    ArrayList<HashMap<String, String>> mylist = new ArrayList<HashMap<String, String>>();
    	    HashMap<String, String> map = new HashMap<String, String>();
    	    
    	    // Lese datenbank aus und speichere es im hashMap!	   
    	    MYDB = this.openOrCreateDatabase("DB", MODE_PRIVATE, null);
    	    
    	    Cursor number = MYDB.rawQuery("select telNumber from Table", null);
    	    Cursor time = MYDB.rawQuery("select finishTime from Table", null);
    	    
    	    for(int x = 0; x<number.getCount(); ++x)
    	    {
    		    number.moveToNext();
    		    String numberToSend = number.getString(0);
    		    time.moveToNext();
    		    String finishTime = time.getString(0);
    		    
    		    // Unix-Timespat in Human-readable :D
    		    SimpleDateFormat sdfDatum = new SimpleDateFormat("dd.MM.yyyy");
    		    SimpleDateFormat sdfUhrzeit = new SimpleDateFormat("HH:mm");
    		    
    		    map.put("nameNummer", "("+ numberToSend +")");
    		    map.put("datumUhrzeit", sdfDatum.format(Long.parseLong(finishTime)) + " " + sdfUhrzeit.format(Long.parseLong(finishTime)));
    		    mylist.add(map);
    		    map = new HashMap<String, String>();
    	    }
    		
    		SimpleAdapter mSchedule = new SimpleAdapter(this, mylist, R.layout.listlayout, new String[] {"nameNummer", "datumUhrzeit"}, new int[] {R.id.logTextViewNameNummer, R.id.logTextViewDatumUhrzeit});
    		lv.setAdapter(mSchedule);
    
    Jetzt wollte ich noch einen OnItemClickListener hinzufügen. Beim Clicken soll ein Dialog erscheinen mit dem text in der datenbank.
    Genau hier liegt mein problem!
    Wie stelle ich eine "verbindung" her, welche Item geklickt wurde und welcher text aus der datenbank?!
    Wenn die ID in der datenbank vortlaufenwäre, wäre es kein problem. OnItemListener hat ja als parameter "position". Damit könnte ich ja einfach abzählen.
    Allerdings kann ich auch aus dem ListView (oder möchte es später implementieren) items löschen. [Welche auch logischerweiße in der Datenbank gelöscht werden müssen].
    Somit ist die Zuordnung position = id nicht mehr gegeben..

    Wie gehe ich also vor?

    Danke MfG Ice
     
  2. StefMa, 03.07.2012 #2
    StefMa

    StefMa Threadstarter Gewerbliches Mitglied

    Beiträge:
    2,054
    Erhaltene Danke:
    413
    Registriert seit:
    16.10.2010
    Immer das selbe:
    Wenn man fragt, kommt man auf die Lösung!

    Wer es wissen will, wie ICH es mache: (Ja es gibt bestimmt auch andere wege!)
    In der Schleife, die ja sowieso die komplette DB durchläuft, werde ich die ID in einem ListArray speichern.
    Somit weiß ich später, dass ListArray[0] = position 0 usw. ist!
    Im OnItemClickListener kann ich dann problemlos sagen:
    Code:
     
    select text from Table where id = ListArray[position]
    
    MfG Ice
     
    ImperatorPlebis bedankt sich.

Diese Seite empfehlen