Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
RomanXXI
0 / 0 / 0
Регистрация: 20.03.2015
Сообщений: 9
#1

Обновление данных адаптера

20.03.2015, 07:39. Просмотров 836. Ответов 11
Метки нет (Все метки)

Здравствуйте. Помогите, кто сталкивался. Есть список, где в зависимости от значения свойства отображенного объекта подставляется лейаут:
Java
1
2
3
4
5
6
    LayoutInflater inflater = ((Activity)context).getLayoutInflater();
    if (app.isRead == 0) {
        row = inflater.inflate(layoutResID, parent, false);
    } else {
        row = inflater.inflate(layoutResID_is_read, parent, false);
    }
В адаптере навешаны обработчики на кнопки. По нажатию на одну из них у app.isRead устанавливается в значение 1 - и надо "перерисовать" список. Как можно перерисовать список из обработчика адаптера??
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.03.2015, 07:39
Ответы с готовыми решениями:

Обновление адаптера на неактивной активити
Есть две активити одна выводит на листвью данные, другая заполняет. При вызове...

Обновление данных
Добрый день. Еще такая проблема возникла. Есть форма где нужно...

Обновление Базы данных
Есть база данных которую просматриваю в Активити1, сделал все работает. При...

ExpandableListView обновление данных
Каким образом мне обновить его? Чтобы я изменил данные массива и обновил. ...

Обновление данных в ArrayAdapter
Добрый день. Есть созданный ArrayAdapter. Он добавляется в listView, при...

11
Rube
911 / 559 / 88
Регистрация: 13.02.2014
Сообщений: 2,074
20.03.2015, 08:42 #2
Привет. Перерисовать список из обработчика адаптера можно notifyDataSetChanged().
0
RomanXXI
0 / 0 / 0
Регистрация: 20.03.2015
Сообщений: 9
20.03.2015, 10:32  [ТС] #3
Привет. А вот и не работает. Этот метод перерисовывает отображаемые данные. У меня изменились данные, которые не отображаются. В адаптере в методе getView на основании значения этих данных выбирается лейаут. notifyDataSetChanged() - метод getView не вызывает заново.
0
YuraAAA
1578 / 1319 / 282
Регистрация: 25.10.2009
Сообщений: 3,436
Записей в блоге: 2
20.03.2015, 10:49 #4
RomanXXI, вызывает только для видимых элементов. Так как адаптер кэширует остальные элементы списка.
0
RomanXXI
0 / 0 / 0
Регистрация: 20.03.2015
Сообщений: 9
20.03.2015, 10:53  [ТС] #5
И как тогда можно такое сделать?
0
YuraAAA
1578 / 1319 / 282
Регистрация: 25.10.2009
Сообщений: 3,436
Записей в блоге: 2
20.03.2015, 11:55 #6
RomanXXI, Вам уже ответил Rube. notifyDataSetChanged(). Видимые элементы перерисуются сразу. Для остальных вызовется getView когда они станут видны.
0
RomanXXI
0 / 0 / 0
Регистрация: 20.03.2015
Сообщений: 9
20.03.2015, 12:46  [ТС] #7
Я наверно как-то неправильно спросил. Есть свойство, которое никогда не будет видно (true, false). Обработчик нажатия на кнопку (в классе Адаптера) меняет это свойство. А в зависимости от значения этого свойства в getView меняется лейаут выводимой строки. Т.е. пример, я нажал на кнопку в строке, строка была синей, стала желтой. Вот такое как?
0
Rube
911 / 559 / 88
Регистрация: 13.02.2014
Сообщений: 2,074
20.03.2015, 12:59 #8
Код адаптера выложи, мы тут должны догадываться что за адаптер?
Вот так примерно должно быть:
Java
1
textView.setTextColor(position == 1 ? yellow : blue);
0
RomanXXI
0 / 0 / 0
Регистрация: 20.03.2015
Сообщений: 9
20.03.2015, 13:05  [ТС] #9
Он большой. Но суть щас выложу:
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
       @Override
    public View getView(final int position, View convertView, ViewGroup parent) {
        
        NewsHolder holder = null;
        View row = convertView;
        holder = null;
        
        final Application app = (Application) data.get(position);  // Здесь данные из БД (где лежит "невидимое" свойство = "isRead"
        
        if(row == null){
            
            LayoutInflater inflater = ((Activity)context).getLayoutInflater();
// ****
            if (app.isRead == 0) {     // А это проверка на это свойство и разные Лейауты
                row = inflater.inflate(layoutResID, parent, false);
            } else {
                row = inflater.inflate(layoutResID_is_read, parent, false);
            }
// ****
            
            holder = new NewsHolder();
            
            holder.number_app = (TextView) row.findViewById(R.id.Number_sw);  // Здесь видимое свойство
            
                holder.btn_pr = (ImageButton) row.findViewById(R.id.img_ok);  
            
            row.setTag(holder);         
        } else {
            holder = (NewsHolder)row.getTag();
        }
        }
 
 
    static class NewsHolder{    // статический класс - набор свойств     
        TextView number_app;
        ImageButton btn_ok;
    }
 
 
        holder.btn_ok.setOnClickListener(new View.OnClickListener() {           
            @Override
            public void onClick(View v) {
                ..........................
                                // А здесь изменим свойство isRead в БД, как перерисовать
            }
        });
0
Rube
911 / 559 / 88
Регистрация: 13.02.2014
Сообщений: 2,074
20.03.2015, 14:17 #10
Мешанина какая-то, глаза сломать можно, теги jawa надо использовать и отступы.
0
RomanXXI
0 / 0 / 0
Регистрация: 20.03.2015
Сообщений: 9
20.03.2015, 14:55  [ТС] #11
Да я первый раз ((( Где это??
0
RomanXXI
0 / 0 / 0
Регистрация: 20.03.2015
Сообщений: 9
09.04.2015, 12:18  [ТС] #12
Пожалуй сделаю up
0
09.04.2015, 12:18
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.04.2015, 12:18

Обновление данных в activity
Всем доброй ночи! Как обновить данные в активити при возврате из диалога или...

Обновление данных приложения
Здравствуйте, есть простенькое приложение, которое показывает количество дней...

SQLite обновление базы данных
Всем привет. Использую базу данных в приложении. При обновлении программы...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru