ListView不显示第一行值

时间:2017-04-10 20:14:23

标签: java android android-sqlite

更新:问题已修复 - ActionBar涵盖了名单上的第一个项目。

解决方案: Android AppBarLayout overlaps listview

在我的程序中,我正在从数据库中检索数据并使用列表视图显示它。 但是,在此过程中始终会跳过第一行元素,并且显示从第二行开始。

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);
}

如何从第一行显示? 感谢任何帮助。谢谢。

编辑:我已经尝试过使用&#39; do-while&#39;和一个&#39; for循环&#39;,所有这些都给出相同的结果。

3 个答案:

答案 0 :(得分:1)

尝试更改

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

编辑:更改时间,使其在以下后递增:

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

答案 1 :(得分:0)

就个人而言,我建议在使用数据库时CursorAdapter

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);

答案 2 :(得分:0)

试试这个代码可能对使用游标从db中获取数据很有用。

  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;
}