Android ListView适配器仅显示最后一个元素

时间:2011-10-10 12:17:45

标签: android listview

SQLite数据库获取所有数据并在ListView中显示它们时遇到一些问题。我正在使用的代码只显示最后一项。这是我正在使用的代码:

        ListView lv1 = (ListView) findViewById(R.id.saved_codes_listview);
        SystemDatabaseHelper systemDbHelper = new SystemDatabaseHelper(this, null, 1);
        systemDbHelper.initialize(this);

        String sqlQuery = "SELECT code_id, code_string FROM saved_codes";
        Cursor cursor = systemDbHelper.executeSQLQuery(sqlQuery);
        if(cursor.getCount()==0){
            Log.i("No Saved Codes","There is no Saved Codes.");
        } else if(cursor.getCount()>0){
            for(cursor.move(0); cursor.moveToNext(); cursor.isAfterLast()){
                String codeString = cursor.getString(cursor.getColumnIndex("code_string"));
                ArrayList<String> codes = new ArrayList<String>();
                codes.add(codeString);
                Log.i("Code String","Code String : "+codeString);
                ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, codes);
                lv1.setAdapter(adapter);

            }
        }

我的数据库中有3个条目作为示例:shosho,bosho,gosho,因此我的listview中只有gosho。知道怎么解决这个问题吗?

提前致谢!

3 个答案:

答案 0 :(得分:6)

更改代码,以便在for循环之前初始化数组列表,并在循环之后设置ArrayAdapter。

ArrayList<String> codes = new ArrayList<String>();
for(cursor.move(0); cursor.moveToNext(); cursor.isAfterLast()){
                String codeString = cursor.getString(cursor.getColumnIndex("code_string"));
                codes.add(codeString);
                Log.i("Code String","Code String : "+codeString);         
}
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, codes);
lv1.setAdapter(adapter);

答案 1 :(得分:1)

像这样:

            ArrayList<String> codes = new ArrayList<String>();
    for(cursor.move(0); cursor.moveToNext(); cursor.isAfterLast()){
            String codeString = cursor.getString(cursor.getColumnIndex("code_string"));

            codes.add(codeString);
            Log.i("Code String","Code String : "+codeString);
            ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, codes);
            lv1.setAdapter(adapter);

        }

你在每个循环中重新创建一个新的ArrayList<String> codes,所以最后一个循环列表只包含一个元素,这是最后一个。

答案 2 :(得分:0)

更改for(cursor.move(0); cursor.moveToNext(); cursor.isAfterLast())

for(cursor.move(0);; cursor.isAfterLast(); cursor.moveToNext())

或使用

while(cursor.isAfterLast())
cursor.moveToNext();