Форум программистов, компьютерный форум, киберфорум
Программирование Android
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/18: Рейтинг темы: голосов - 18, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 10.04.2013
Сообщений: 7

Обновление данных в ArrayAdapter

10.04.2013, 12:05. Показов 3623. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день.
Есть созданный ArrayAdapter. Он добавляется в listView, при достижении конца списка происходит получение информации и добавление ее. Текущая информация заменяется новой, подскажите, как добавить новую информацию не потеряв старую.

получение информации:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
private class ParseSite extends AsyncTask<String, Void, List<Vacancy>> {
        
        protected List<Vacancy> doInBackground(String... arg) {
          List<Vacancy> output = new ArrayList<Vacancy>();
          try{
            HtmlHelper hh = new HtmlHelper(new URL(arg[0]),
                    getApplicationContext());
            output = hh.getTable();         
          }
          catch(Exception e){
            e.printStackTrace();
          };
        return output;
        }
        
        protected void onPostExecute(List<Vacancy>output){
            super.onPostExecute(output);            
            output.remove(0);           
            if (backUp == null){
                backUp = new ArrayList<Vacancy>(output);
            } else{
                backUp.addAll(output);
            }
 
            try{
                if (adapter == null){
                adapter = new InteractiveArrayAdapter(MainActivity.this, backUp);
                } else {
                    adapter.addAll(backUp);
                }
                adapter.notifyDataSetChanged();
                listview.setAdapter(adapter);
                listview.setOnScrollListener(new OnScrollListener(){
 
                    @Override
                    public void onScroll(AbsListView view,
                            int firstVisibleItem, int visibleItemCount,
                            int totalItemCount) {
                        if (view.getAdapter() != null && 
                                (firstVisibleItem + visibleItemCount >= totalItemCount) &&
                                (totalItemCount != 0 )){
                            
                            adapter.clear();
                            addInfo();
                        }
                        
                    }
 
                    @Override
                    public void onScrollStateChanged(AbsListView view,
                            int scrollState) {
                        // TODO Auto-generated method stub
                        
                    }
                    
                });
                
            } catch(Exception e){
                
            }
            dialog.dismiss();   
        }
    }
добавление:

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
private void addInfo(){
        try{
            dialog  = ProgressDialog.show(MainActivity.this, 
                    "Working...", "request to server", true, false);
            parser = new ParseSite();
            parser.execute(url + Integer.toString(page++));
                        
        } catch (Exception e){
            Toast toast = Toast.makeText(MainActivity.this, e.getMessage(), Toast.LENGTH_LONG);
            toast.show();
        }
        adapter.notifyDataSetChanged();
    }
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
10.04.2013, 12:05
Ответы с готовыми решениями:

Выкидывает NullPointerException при заполнении данных через ArrayAdapter
Заполняю данные из массива Food.foods с помощью ArrayAdapter в ListView макета activity_food_category.xml. При заполнении выкидывает ошибку...

Обновление базы и ошибка: Обновление невозможно. База данных или объект доступны только для чтения.
Помогите пожалуйста! asp не может обновить базу. Про ошибку говорит Microsoft OLE DB Provider for ODBC Drivers (0x80004005) ...

ACTION_SEND в ArrayAdapter
Ребят,вопрос такой, есть GridView с картинками, к нему отдельным классом подключен Adapter. Необходимо по клику картинки делать ACTON_SEND....

13
1162 / 986 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
10.04.2013, 12:55
backUp.addAll(newData);
adapter.notifyDataSetChanged();
0
0 / 0 / 0
Регистрация: 10.04.2013
Сообщений: 7
10.04.2013, 14:10  [ТС]
Попробовал, то же самое. Посмотрел в дебаге, содержимое backUp, обнуляется, похоже что дело в в нем. Объявляю так:
Java
1
2
private List <Vacancy> backUp = new 
            ArrayList<Vacancy>();
0
1162 / 986 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
10.04.2013, 14:13
ну ищите где он у вас обнуляется.
0
0 / 0 / 0
Регистрация: 10.04.2013
Сообщений: 7
10.04.2013, 15:23  [ТС]
Обнуляется когда делаю adapter.clear(); в onScroll, похоже из за ссылки. А если убрать - происходит зацыкливание

Добавлено через 1 час 0 минут
не подскажите как этого избежать?)
0
1162 / 986 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
10.04.2013, 15:29
нужно разбираться с кодом, не совсем понимаю где оно у вас происходит.
0
0 / 0 / 0
Регистрация: 10.04.2013
Сообщений: 7
10.04.2013, 15:30  [ТС]
в слушателе скролла
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
listview.setOnScrollListener(new OnScrollListener(){
 
                    @Override
                    public void onScroll(AbsListView view,
                            int firstVisibleItem, int visibleItemCount,
                            int totalItemCount) {
                        if (view.getAdapter() != null && 
                                (firstVisibleItem + visibleItemCount >= totalItemCount) &&
                                (totalItemCount != 0 )){
                            
                            adapter.clear();
                            addInfo();
                        }
                        
                    }
0
1162 / 986 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
10.04.2013, 15:35
выложите проект.
0
0 / 0 / 0
Регистрация: 10.04.2013
Сообщений: 7
10.04.2013, 15:43  [ТС]
http://ubuntuone.com/4H0S9UGmW5NU7bfXNIYwY2
0
1162 / 986 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
11.04.2013, 20:56
не было времени посмотреть проект, но возможно вам нужно добавить проверку не идет ли загрузка в данный момент прежде чем вызывать новую.

Добавлено через 16 минут
Цитата Сообщение от KTOIA Посмотреть сообщение
if (adapter == null){
* * * * * * * * adapter = new InteractiveArrayAdapter(MainActivity.thi s, backUp);
* * * * * * * * } else {
* * * * * * * * * * adapter.addAll(backUp);
* * * * * * * * }
* * * * * * * * adapter.notifyDataSetChanged();
* * * * * * * * listview.setAdapter(adapter);
* * * * * * * * listview.setOnScrollListener(new OnScrollListener(){
@Override
* * * * * * * * * * public void onScroll(AbsListView view,
* * * * * * * * * * * * * * int firstVisibleItem, int visibleItemCount,
* * * * * * * * * * * * * * int totalItemCount) {
* * * * * * * * * * * * if (view.getAdapter() != null &&
* * * * * * * * * * * * * * * * (firstVisibleItem + visibleItemCount >= totalItemCount) &&
* * * * * * * * * * * * * * * * (totalItemCount != 0 )){
adapter.clear();
* * * * * * * * * * * * * * addInfo();
* * * * * * * * * * * * }
}
@Override
* * * * * * * * * * public void onScrollStateChanged(AbsListView view,
* * * * * * * * * * * * * * int scrollState) {
* * * * * * * * * * * * // TODO Auto-generated method stub
}
});
почему этот код в AsyncTask'e?
1
0 / 0 / 0
Регистрация: 10.04.2013
Сообщений: 7
12.04.2013, 08:15  [ТС]
ну как, это же обновление интерфейса, насколько я читал, его обновление и нужно делать через AsyncTask.

не идет ли загрузка данных - если это про наполнение, то не идет 100%, т.к. процесс обновления выполняется в onPostExecute, т.е. после загрузки данных

кста, спасибо, что в моем коде не поленились порыться

Добавлено через 14 минут
Зато разобрался из за чего зацикливание - если не очистить adapter перед вызовом обновления UI, который будет происходить асинхронно , то в это время еще несколько раз сработает условие, что достигнут предел скролла и еще несколько потоков запустятся для загрузки инфы.
0
1162 / 986 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
12.04.2013, 11:14
Цитата Сообщение от KTOIA Посмотреть сообщение
Зато разобрался из за чего зацикливание - если не очистить adapter перед вызовом обновления UI, который будет происходить асинхронно , то в это время еще несколько раз сработает условие, что достигнут предел скролла и еще несколько потоков запустятся для загрузки инфы.
просто проверяйте не происходит ли обновление прежде чем запускать новое.


Цитата Сообщение от KTOIA Посмотреть сообщение
ну как, это же обновление интерфейса,
нет, это создание адаптера и лысынера.


Цитата Сообщение от KTOIA Посмотреть сообщение
насколько я читал, его обновление и нужно делать через AsyncTask.
просто нужно делать в UI потоке.
0
0 / 0 / 0
Регистрация: 10.04.2013
Сообщений: 7
12.04.2013, 11:49  [ТС]
Цитата Сообщение от V0v1k Посмотреть сообщение
нет, это создание адаптера и лысынера.
ну да вначале создаем, а потом обновляем:

Java
1
listview.setAdapter(adapter);
и это все делается после того как AsyncTask закончил работать и мы точно знаем что инфа полная, я не не очень представляю как об этом узнать в UI

Добавлено через 5 минут
а может быть это из за конструктора в InteractiveArrayAdapter

Java
1
2
3
4
5
public InteractiveArrayAdapter(Activity context, List<Vacancy> jobs){
        super(context, R.layout.adaptor, jobs);
        this.context = context;
        this.jobs = jobs;
    }
я перегрузил там же:
Java
1
2
3
4
5
6
7
8
    @Override
    public void clear(){
        this.jobs.clear();
    }
    
    public void addAll(Collection<? extends Vacancy> jobs) {
        this.jobs.addAll(jobs);     
    }
но тоже не помогло
0
12.04.2013, 12:40
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
12.04.2013, 12:40
Помогаю со студенческими работами здесь

Собственный ArrayAdapter
Доброго времени суток. Пытаюсь написать собственный адаптер для строкового типа: titles = new...

Привязка класса к ArrayAdapter
Добрый день. Есть класс, содержащий опросы private static class Polls { private final int _Id; private final...

ArrayAdapter и много заморочек
Сам ArrayAdapter String data = new String{&quot;Текст 1&quot;,&quot;Текст 2&quot;}; ArrayAdapter&lt;String&gt; adapter = new ArrayAdapter&lt;&gt;(this, ...

Отличия в работе ArrayAdapter
Что то не понятное с ArrayAdapter на Android 2.3, У меня есть EditText в списке, меняя значение одного, меняются все. На Android &gt;= 4.0...

Собственный адаптер на основе ArrayAdapter
Хочу реализовать, чтобы при keydown элемент списка менял цвет фона, а при keyup возвращался в исходное положение, и в то же время выполнял...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes. А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит: токи, напряжения и их 1 и 2 производные при t = 0;. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru