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

Программирование Android

Войти
Регистрация
Восстановить пароль
 
RomanXXI
0 / 0 / 0
Регистрация: 20.03.2015
Сообщений: 9
#1

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

20.03.2015, 07:39. Просмотров 594. Ответов 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 - и надо "перерисовать" список. Как можно перерисовать список из обработчика адаптера??
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Rube
911 / 559 / 88
Регистрация: 13.02.2014
Сообщений: 2,070
20.03.2015, 08:42     Обновление данных адаптера #2
Привет. Перерисовать список из обработчика адаптера можно notifyDataSetChanged().
RomanXXI
0 / 0 / 0
Регистрация: 20.03.2015
Сообщений: 9
20.03.2015, 10:32  [ТС]     Обновление данных адаптера #3
Привет. А вот и не работает. Этот метод перерисовывает отображаемые данные. У меня изменились данные, которые не отображаются. В адаптере в методе getView на основании значения этих данных выбирается лейаут. notifyDataSetChanged() - метод getView не вызывает заново.
YuraAAA
1565 / 1307 / 269
Регистрация: 25.10.2009
Сообщений: 3,424
Записей в блоге: 2
20.03.2015, 10:49     Обновление данных адаптера #4
RomanXXI, вызывает только для видимых элементов. Так как адаптер кэширует остальные элементы списка.
RomanXXI
0 / 0 / 0
Регистрация: 20.03.2015
Сообщений: 9
20.03.2015, 10:53  [ТС]     Обновление данных адаптера #5
И как тогда можно такое сделать?
YuraAAA
1565 / 1307 / 269
Регистрация: 25.10.2009
Сообщений: 3,424
Записей в блоге: 2
20.03.2015, 11:55     Обновление данных адаптера #6
RomanXXI, Вам уже ответил Rube. notifyDataSetChanged(). Видимые элементы перерисуются сразу. Для остальных вызовется getView когда они станут видны.
RomanXXI
0 / 0 / 0
Регистрация: 20.03.2015
Сообщений: 9
20.03.2015, 12:46  [ТС]     Обновление данных адаптера #7
Я наверно как-то неправильно спросил. Есть свойство, которое никогда не будет видно (true, false). Обработчик нажатия на кнопку (в классе Адаптера) меняет это свойство. А в зависимости от значения этого свойства в getView меняется лейаут выводимой строки. Т.е. пример, я нажал на кнопку в строке, строка была синей, стала желтой. Вот такое как?
Rube
911 / 559 / 88
Регистрация: 13.02.2014
Сообщений: 2,070
20.03.2015, 12:59     Обновление данных адаптера #8
Код адаптера выложи, мы тут должны догадываться что за адаптер?
Вот так примерно должно быть:
Java
1
textView.setTextColor(position == 1 ? yellow : blue);
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 в БД, как перерисовать
            }
        });
Rube
911 / 559 / 88
Регистрация: 13.02.2014
Сообщений: 2,070
20.03.2015, 14:17     Обновление данных адаптера #10
Мешанина какая-то, глаза сломать можно, теги jawa надо использовать и отступы.
RomanXXI
0 / 0 / 0
Регистрация: 20.03.2015
Сообщений: 9
20.03.2015, 14:55  [ТС]     Обновление данных адаптера #11
Да я первый раз ((( Где это??
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.04.2015, 12:18     Обновление данных адаптера
Еще ссылки по теме:

Обновление адаптера на неактивной активити Android
Android ExpandableListView обновление данных
Обновление данных Android
Обновление базы данных вручную Android
Android Создание адаптера

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

Или воспользуйтесь поиском по форуму:
RomanXXI
0 / 0 / 0
Регистрация: 20.03.2015
Сообщений: 9
09.04.2015, 12:18  [ТС]     Обновление данных адаптера #12
Пожалуй сделаю up
Yandex
Объявления
09.04.2015, 12:18     Обновление данных адаптера
Ответ Создать тему
Опции темы

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