Android-Droid
Android-Droid

Reputation: 14585

Android ListView Adapter shows only last element

I have a little problem with getting all data from SQLite database and showing them in ListView. The code I'm using is showing only the last item. Here is the code which I'm using :

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

            }
        }

I have 3 entries in my database as an example : shosho, bosho, gosho and as a result I have only gosho in my listview. Any idea how to fix that?

Thanks in advance!

Upvotes: 2

Views: 3517

Answers (3)

Maggie
Maggie

Reputation: 8101

Change your code so that you initialize array list before for loop, and also set ArrayAdapter AFTER the loop.

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

Upvotes: 7

Pete Houston
Pete Houston

Reputation: 15089

Like this:

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

        }

You re-create a new ArrayList<String> codes in every loop so the last loop the list containing only one element, which is the last.

Upvotes: 2

Yahor10
Yahor10

Reputation: 2132

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

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

or use

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

Upvotes: 0

Related Questions