Форум программистов, компьютерный форум CyberForum.ru

При выводе ArrayList<T> выводит последние элементы - Android

Восстановить пароль Регистрация
 
Worldmen
 Аватар для Worldmen
2 / 2 / 1
Регистрация: 31.08.2013
Сообщений: 191
Завершенные тесты: 1
03.11.2015, 00:00     При выводе ArrayList<T> выводит последние элементы #1
Класс Words:
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
public class Words {
    public int Id;
    public String WordEnglish;
    public String WordRussian;
    public String Transcription;
    public int Category;
}

Метод заполнения списка ArrayList<Words>:
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
    public ArrayList<Words> GetAllWords(SQLiteDatabase db){
        ArrayList <Words> allWords = new ArrayList<>();
        Words w = new Words();
        Cursor cur = db.query(tabWords, null, null, null, null, null, null);
        while (cur.moveToNext()){
            w.Id = cur.getInt(cur.getColumnIndex("_id"));
            w.WordEnglish = cur.getString(cur.getColumnIndex("wordEng"));
            w.WordRussian = cur.getString( cur.getColumnIndex("wordRus"));
            w.Transcription = cur.getString( cur.getColumnIndex("transcript"));
            w.Category = cur.getInt(cur.getColumnIndex("category"));
 
            allWords.add( w );
        }
 
        cur.close();
        return allWords;
    }

Метод создания таблицы в активити (TableAllWords):
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
   public void TableAllWords(String eng, String rus, String trn){   
        TextView fEng = new TextView(getApplicationContext());
        fEng.setPadding(2, 1, 5, 0);    
        fEng.setText(eng);
 
        TextView fRus = new TextView(getApplicationContext());
        fRus.setPadding(2, 1, 5, 0);        
        fRus.setText(rus);
 
        TextView fTrn = new TextView(getApplicationContext());
        fTrn.setPadding(2, 1, 5, 0);        
        fTrn.setText(trn);
 
        TableRow row = new TableRow(getApplicationContext());
        row.addView(fEng);  
        row.addView(fRus);  
        row.addView(fTrn);  
 
        tableWords.addView(row);
    }

Так заполняю таблицу:
Java
1
2
3
4
ArrayList<Words> w = dbHelper.GetAllWords(db);
for(Words item : w){
      TableAllWords(item.WordEnglish,item.WordRussian,item.Transcription);
}
В базе данных в таблице у меня 7 записей, в таблице формы андроида выводит 7 раз последнюю запись.
Почему?
И если так выводить, то же самое получается:
Java
1
2
3
for (int i = 0; i<w.size();i++){
    TableAllWords(w.get(i).WordEnglish,w.get(i).WordRussian,w.get(i).Transcription);
 }
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.11.2015, 00:00     При выводе ArrayList<T> выводит последние элементы
Посмотрите здесь:

ArrayList Android
Android Как поместить в preferences arrayList типа: arraylist<Class>
ArrayList Android
Android Работа с ArrayList
Android Фильтрация ArrayList
ArrayList не заполняется в AsyncTask Android
Задержка при выводе картинки в button? Android
Android ArrayList<ListData> определение
Сортировка в ArrayList Android
Android ArrayList contains object
Android Работа с ArrayList
Android arrayList Android

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Mikalai
248 / 224 / 91
Регистрация: 11.01.2015
Сообщений: 643
03.11.2015, 00:26     При выводе ArrayList<T> выводит последние элементы #2
Worldmen, попробуй так написать метод getAllWords

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public ArrayList<Words> getAllWords(SQLiteDatabase db){
        ArrayList <Words> allWords = new ArrayList<>();
        Words w = new Words();
        Cursor c = db.query(tabWords, null, null, null, null, null, null);
        
        if (c != null) {
            if (c.moveToFirst()) {
                do {
                     w.Id = c.getInt(c.getColumnIndex("_id"));
                     w.WordEnglish = c.getString(c.getColumnIndex("wordEng"));
                     w.WordRussian = c.getString( c.getColumnIndex("wordRus"));
                     w.Transcription = c.getString( c.getColumnIndex("transcript"));
                     w.Category = c.getInt(c.getColumnIndex("category"));
          
                     allWords.add( w );
                } while (c.moveToNext());
            }
        }
 
        c.close();
        return allWords;
    }
YuraAAA
 Аватар для YuraAAA
1563 / 1305 / 269
Регистрация: 25.10.2009
Сообщений: 3,424
Записей в блоге: 2
03.11.2015, 10:54     При выводе ArrayList<T> выводит последние элементы #3
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Mikalai, Вы чуть ошиблись. В цикле надо каждый раз создавать
Java
1
w = new Words();
иначе будет одна и та же ссылка лежать в ArrayList
Mikalai
03.11.2015, 11:58     При выводе ArrayList<T> выводит последние элементы
  #4

Не по теме:

YuraAAA, согласен. Недочёт. Спишем это на позднее время )))

Yandex
Объявления
03.11.2015, 11:58     При выводе ArrayList<T> выводит последние элементы
Ответ Создать тему
Опции темы

Текущее время: 19:31. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru