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

Listview mit Chronometer

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von setreset, 02.09.2010.

  1. setreset, 02.09.2010 #1
    setreset

    setreset Threadstarter Neuer Benutzer

    Beiträge:
    5
    Erhaltene Danke:
    0
    Registriert seit:
    06.02.2010
    Hallo liebe Android-Experten,
    ich habe eine Listactivity mit einem eigenen Zeilenlayout bestehend aus Textviews. Das klappt auch alles ganz gut, aber jetzt möchte ich in jede Zeile zusätzlich einen Chronometer in die Listactivity packen. Ein Chronometer ist eine Erweiterung der Textview mit der Fähigkeit sich selbst zu aktualisieren (mit eigenem Thread denke ich..) und dadurch Zeit hochzuzählen und anzuzeigen.

    Ich habe einen ViewBinder, mit dem ich wunderbar die verschiedenen Textviews setzen kann (je nach Datenbankzustand), dass hätte ich auch gerne mit den Chronometern, also dass sie unabhängig voneinander laufen können. Das Problem ist, wenn ein Chronometer läuft und ein zweiter dazukommt, bekommt auch der erste Chronometer die Startzeit des zweiten. Es laufen dann zwar beide, aber die Zeit kann anscheinend nicht individuell gesetzt werden.

    Ist das ein generelles Problem, dass irgendwie mit der Listview zusammenhängt?

    Viele Grüße
    Christian
     
  2. ko5tik, 02.09.2010 #2
    ko5tik

    ko5tik Android-Experte

    Beiträge:
    620
    Erhaltene Danke:
    40
    Registriert seit:
    14.10.2009
    Phone:
    HTC Hero
    Da du deinen Code nicht postest, ist es schwer zu sagen ob es ein generelles Problem ist. Aber es ist Üblich, die View-Komponenten in der Listen die gerade nicht sichtbar sind, wiederzuverwenden. Liegt es vielleich daran?
     
  3. setreset, 02.09.2010 #3
    setreset

    setreset Threadstarter Neuer Benutzer

    Beiträge:
    5
    Erhaltene Danke:
    0
    Registriert seit:
    06.02.2010
    Kann sein, allerdings tritt der Effekt auch bei z.B. nur zwei Listeneinträgen auf und die werden komplett angezeigt. Hier zwei Codeausschnitte:

    Hier werden die Datenbankfelder an den SimpleCursorAdapter übergeben, der dann der Listview zugeordnet wird. Ich habe einfach die ID's der Zeilen verwendet, weil ich später sowieso auf andere Felder zugreife.

    Code:
    String[] from = new String[] { TimerDbAdapter.KEY_ROWID,TimerDbAdapter.KEY_ROWID};
    int[] to = new int[] { R.id.text1,R.id.chrono1};
    SimpleCursorAdapter timer = new SimpleCursorAdapter(this, R.layout.timer_row, timerCursor, from, to);
    
    Hier ist schematisch die setViewValue-Methode aus dem ViewBinder:

    Code:
    @Override
    public boolean setViewValue(View view, Cursor cursor, int columnIndex) {
        if(view.getId()==R.id.text1){
            long counter = cursor.getLong(2);
            String x = Long.toString(counter);
            if (cursor.getString(3).equals("null")){
                ((TextView)view).setText("null "+x);                
            }else{
                ((TextView)view).setText(x);        
            }
        }else if (view.getId()==R.id.chrono1){
            if (cursor.getString(3).equals("null")){
                ((Chronometer)view).stop();
            }else{
                ((Chronometer)view).start();
            }
        }
        return true;
    }
    
     
    Zuletzt bearbeitet: 02.09.2010

Diese Seite empfehlen