2017-04-10 1 views
0

UPDATE: PROBLEM BEHOBEN - Die ActionBar verdeckte das erste Element in der Liste.ListView zeigt den ersten Zeilenwert nicht an

LÖSUNG:Android AppBarLayout overlaps listview

In meinem Programm, ich Daten aus der Datenbank abgerufen und mit Listenansicht angezeigt werden. Die ersten Zeilenelemente werden dabei jedoch immer übersprungen und die Anzeige beginnt ab der zweiten Zeile.

public void displaydata(){ 
    Cursor res = myDb.getAllData(); 
    lv = (ListView) findViewById(R.id.idListView); 
    if(res.getCount() == 0){ 
     //show message 
     return; 
    } 
    ArrayList<String> buffer = new ArrayList<>(); 
    while(res.moveToNext()){ 
     buffer.add(res.getString(1)); 
    }; 
    ArrayAdapter<String> adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1,buffer); 
    lv.setAdapter(adapter); 
} 

Wie mache ich es aus der ersten Zeile anzeigen? Jede Hilfe wird geschätzt, danke.

EDIT: Ich habe alle vorgeschlagenen Antworten der Verwendung einer 'Do-While' und einer 'for-Schleife' versucht, die alle das gleiche Ergebnis geben.

+0

Ich glaube, seine weil 'res.moveToNext()' geht in die nächste Zeile so Index 0 – Derek

+0

Verwandte übersprungen wird: http://stackoverflow.com/questions/10723770/whats-the-best-way- to-iterate-and-android-cursor – JBC

+0

Mögliches Duplikat von [Was ist der beste Weg, um einen Android Cursor zu iterieren?] (http://stackoverflow.com/questions/10723770/whats-the-best-way-to-iterate- An-android-cursor) –

Antwort

0

Versuchen Sie, diese

for(res.moveToFirst(); !res.isAfterLast(); res.moveToNext()){ 
    buffer.add(res.getString(1)); 
} 
+0

Immer noch das gleiche Ergebnis:/.. die erste Zeile wird immer noch übersprungen. –

1

Versuchen

while(res.moveToNext()){ 
     buffer.add(res.getString(1)); 
    }; 

zu

bearbeiten zu ändern: die während ändern, so erhöht er nach:

do { 
    buffer.add(res.getString(1)); 
} while (cursor.moveToNext()); 
+1

'do {...} while (res.moveToNext());' wird bevorzugt, um wiederholte 'getCount()' Aufrufe zu vermeiden –

+0

@Derek Baxter Das würde nicht funktionieren, weil ich 'res' auf den nächsten Punkt machen muss Datenelement mit 'res.moveToNext'. –

+0

@SouravSamanta http://stackoverflow.com/a/22417381/2308683 –

0

Persönlich würde ich ein empfehlen CursorAdapter bei Verwendung einer Datenbank.

lv = (ListView) findViewById(R.id.idListView); 

String from = { COLUMN_NAME }; 
int[] to = { android.R.id.text1 }; 

SimpleCursorAdapter adapter = 
    new SimpleCursorAdapter(this, android.R.layout.simple_list_item_1, 
      myDb.getAllData(), 
      from, to); 
lv.setAdapter(adapter); 
+0

Es besagt, dass "SimpleCursorAdapter" veraltet ist –

+0

Ja, das stimmt, aber das bedeutet nicht, dass dies nicht funktionieren sollte –

0

Probieren Sie diesen Code kann nützlich sein, um Daten aus db mit Cursor abrufen.

public ArrayList<BasicInfo> getFetchBasicInfo() { 

    ArrayList<BasicInfo> data = new ArrayList<BasicInfo>(); 

    String sql = "select * from basic_info; 

    Cursor c = fetchData(sql); 

    if (c != null) { 
     while (c.moveToNext()) { 

      String FirstName = c.getString(c.getColumnIndex("first_name")); 

      String LastName = c.getString(c.getColumnIndex("last_name")); 
      String Sabcription = c.getString(c 
        .getColumnIndex("salutation_id")); 
      data.add(new BasicInfo(FirstName, LastName)); 
     } 
     c.close(); 
    } 
    return data; 
} 
Verwandte Themen