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

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

Войти
Регистрация
Восстановить пароль
 
JIyrApy
32 / 32 / 1
Регистрация: 22.08.2010
Сообщений: 252
#1

Разбиение ListView - Программирование Android

23.05.2013, 17:26. Просмотров 875. Ответов 4
Метки нет (Все метки)

Здравствуйте.
Есть ListView с записями. Каждая запись имеет свою дату. Хочу разделить этот список по датам. Ну например блок записей каждого дня ограничивать каким-нить цветным разделителем (то есть в приделах дня разделитель обычный, а на границах дней - красный). Проблема в следующем - как отследить эту границу дней?
Понятно, что через адаптер. Попробовал вот так:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
метод getView адаптера
...
MyCosts item=getItem(position);
Date createdDate=item.getCDate();
TextView thisday=(TextView)costsView.findViewById(R.id.thisday);  /*thisday является самым верхнем TextView в layout
 адаптера. Идея заключается в том, что если проскакивает граница дней, то в thisday записываем "Новый день", 
если не проскакивает, то сжимаем thisday до 1 пикселя) Может есть еще какой вариант решения подобной задачи?*/
        if(position==0){
            thisday.setText("Новый день"); // самая верхняя запись, логично, что по любому новый день
        }else{
            MyCosts previtem=getItem(position-1); // если не верхняя запись, то берем предыдущую запись
                Date prevdate=previtem.getCDate(); // и сравниваем ее день, месяц и год с такими же данными у текущей
            if(prevdate.getYear()==createdDate.getYear()&&prevdate.getMonth()==createdDate.getMonth()&&prevdate.getDay()==createdDate.getDay()){
                thisday.setText("");
                thisday.setHeight(1);
                
            }else{
                thisday.setText("Новый день"); // если не совпадает, то у текущей  запишем "Новый день"
            }
        }
...
Что получается. При выводе списка - все норм, но стоит добавить новую запись в список или удалить (в общем применить notifyDataSetChanged()) - все слетает, остается сплошной список (ну кроме первой записи, так как добавление идет в верхнюю строку и она имеет 0 позицию).
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.05.2013, 17:26
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Разбиение ListView (Программирование Android):

ListView. После добавления кнопки перестал быть доступен сам ListView - Программирование Android
Кастомизировал ListView с помощью нескольких TextView. Но после того, как добавил ImageButton сам список стал недоступен для клика, а...

Listview вывод данных и переход по нажатию на другой Listview SQLite - Программирование Android
Доброго извините за название темы, долго не мог сформировать название, В общем у меня беда с пытаюсь написать программу где первый экран...

Данные из SQlite в ListView, обработка события ListView - Программирование Android
Ребят, есть БД, ListView. Надо при нажатии на строчку ListView вытащить данные int из БД. mList.setOnItemClickListener(new...

ListView, ToggleButton, SQLite, CursorAdapter. Как найти idItem в ListView, где была нажата ToggleButton? - Программирование Android
Добрый день. Затрудняюсь понять один момент: У меня есть ListView, который заполнен Items. Каждый Item - это свой XML. Пока...

Копирование данных из 1 listView во 2 listView - Программирование Android
Нужно что бы при нажатии на один элемент в первом ListView он копировался во второй ListView причём многократно.Но я использую...

Переход из Listview в Listview - Программирование Android
Как сделать, что бы когда нажимаешь в главном листвью на кнопку, открывалось новое нужное(т.е. то по которому тапнули) активити с другим...

4
V0v1k
1159 / 983 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
23.05.2013, 18:41 #2
подебагайте.
0
JIyrApy
32 / 32 / 1
Регистрация: 22.08.2010
Сообщений: 252
23.05.2013, 22:43  [ТС] #3
Хм, странно как то notifyDataSetChaged работает. Поставил вывод логов прямо в адаптере, так судя по ним, получается, что getview срабатывает по три круга. То есть три раза выводился весь список. То есть добавление, обновление записи - список по три раза выводится, а если удаляю запись - один, как и надо.
Видимо сам принцип вывода такой. но сейчас другой вопрос.
Как виверу поставить атрибут height типа match_parent или wrap_content не в разметке xml, а в коде программы?
0
V0v1k
1159 / 983 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
23.05.2013, 23:07 #4
что такое вивер?

Добавлено через 1 минуту
Java
1
2
LinearLayout.LayoutParams trparams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);
view.setLayoutParams(trparams);
1
JIyrApy
32 / 32 / 1
Регистрация: 22.08.2010
Сообщений: 252
24.05.2013, 07:36  [ТС] #5
Решил проблему свою. Все было на много проще. Зачем с height мудрил. Лучше всего с Visible TextView'а надо было поиграться. То есть где выводим "новый день" - видимый элемент, где нет - невидимый.
0
24.05.2013, 07:36
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.05.2013, 07:36
Привет! Вот еще темы с ответами:

Использование ListView в ListView - Программирование Android
Всем привет. Можете показать как использовать ListView в ListView, с заполнением как внешнего ListView, так и внутреннего причем с...

Разбиение строки - Программирование Android
И снова здравствуйте, форумчане. Делал одно приложение и возникла загвоздка. Приложение принимает строку и разделяет ее на строки вида: -...

String разбиение строки - Программирование Android
Добрый день! Есть строка: "\u0003Q\u0004 \u001ERd\u0002000000,U,P, ,1001,A77 ,1 , 2338, , 0, ,0, ...

ListView - Программирование Android
Как в ListView задавать значения Sub Item?


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

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

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