2017-04-10 75 views
0

更新:问题修复 - ActionBar覆盖列表中的第一个项目。ListView不显示第一行值

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

如何从第一行显示? 任何帮助表示赞赏,谢谢。

编辑:我试过所有建议使用'做'和'for循环'的答案,所有这些都给出了相同的结果。

+0

我相信它是因为'res.moveToNext()'所以索引0被跳过转到下一行 – Derek

+0

相关:http://stackoverflow.com/questions/10723770/whats-the-best-way- to-iterate-an-android-cursor – JBC

+0

[重复Android游标的最佳方式是什么?](http://stackoverflow.com/questions/10723770/whats-the-best-way-to-iterate- an-android-cursor) –

回答

0

试试这个

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

仍然得到相同的结果:/ ..第一行仍然被跳过。 –

1

尝试改变

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

编辑:改变一段时间,所以之后递增:

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

'do {...} while(res.moveToNext());''以避免重复的'getCount()'调用是首选 –

+0

@Derek Baxter这不起作用,因为我需要使'res'指向下一个数据项目使用'res.moveToNext'。 –

+0

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

0

就个人而言,我会建议使用数据库时的。

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

它说“SimpleCursorAdapter”已弃用 –

+0

是的,这是真的,但这并不意味着这不应该工作 –

0

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

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