Форум программистов, компьютерный форум, киберфорум
Программирование Android
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.86/21: Рейтинг темы: голосов - 21, средняя оценка - 4.86
535 / 504 / 114
Регистрация: 12.03.2014
Сообщений: 1,671

Скрытие элемента ListView

04.11.2014, 14:03. Показов 4432. Ответов 23
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Заполняю своим адаптером, унаследованным от BaseAdapter. В качестве item использую свой класс который имеет поле isEnable - если оно равно false вместо нормальной строки возвращает в список new View();. При нажатии на элемент назначаю isEnable = false и вызываю adapter.notifyDataSetChanged(). Отрабатывает все отлично, да вот приложение подвисает примерно на секунду. Писал логи при нажатии на элемент - все операции выполняются за 5-7 миллисекунд. Что это может быть и как не вешать ui? Пробовал даже в AsyncTask все выносить - результат тот же. Есть какие нибудь идеи как заставить это работать быстро?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
04.11.2014, 14:03
Ответы с готовыми решениями:

Появление элемента по клику на кнопку и скрытие элемента по клику на любое место body
Задача стоит такая. Нужно сделать так, чтобы по клику на button class="helper" наш div id = "helper_list" появлялся на экране(по...

Скрытие элемента в IE
Возможно не в ту тему, но подскажите как осуществить скрытие или показ другого объекта, вместо данного, в браузаре Internet Explorer?

Скрытие элемента на странице
Добрый день. Пытаюсь убрать горизонтальные линии с шаблона страницы, но не понимаю какие стилем они заданы. Сайт...

23
426 / 406 / 68
Регистрация: 06.10.2012
Сообщений: 1,748
04.11.2014, 14:14
Spelcrawler, как обычно, просим привести хотя бы проблемный кусочек кода. Я отказался от AsyncTask при заполнении адаптера, потому что если пользователь будет несколько раз подряд нажимать на кнопочку, то предыдущее заполнение не успеет отработать, начнётся следующее, которое будет иметь доступ к той же коллекции (массиву) и вызовет исключение, что обращаться можно только в ui-потоке.
1
535 / 504 / 114
Регистрация: 12.03.2014
Сообщений: 1,671
04.11.2014, 15:04  [ТС]
CoolMind, Кусок кода чего?) Вот что в онклик происходит:
Java
1
2
3
4
5
6
7
8
9
public void onItemClick(AdapterView<?> adapterView, View view, int position, long l) {
               
                Log.d("TAG", "startClick");
                Item item = items.get(position);
                item.setEnable(false);
                adapter.notifyDataSetChanged();
                Log.d("TAG", "allDone");
 
            }
И вот из адаптера заполнение:
Java
1
2
3
4
5
6
7
8
9
10
 public View getView(int i, View convertView, ViewGroup viewGroup) {
 
        Item item = getItem(i);
        if(item.isEnable()){
            return viewHolder.getLine(item);
        }else{
            return new View(context);
        }
 
    }
Добавлено через 25 минут
Может есть какой то совершенно другой путь? Или может библиотека какая то которая позволяет скрывать элементы. Или вообще все это засунуть в ScrollView? Чем вообще плох ScrollView для отображения списков?
0
426 / 406 / 68
Регистрация: 06.10.2012
Сообщений: 1,748
04.11.2014, 16:12
Spelcrawler, я не понял, на какой элемент происходит щелчок, в коде вы не описали. Как происходит заполнение адаптера? Всю ли функцию getView вы написали? Что такое getItem? Несколько раз писал свои адаптеры, но не припомню, что такое new View(context). Пока не могу помочь вам, потому что все проекты на работе.
0
535 / 504 / 114
Регистрация: 12.03.2014
Сообщений: 1,671
04.11.2014, 16:15  [ТС]
Цитата Сообщение от CoolMind Посмотреть сообщение
я не понял, на какой элемент происходит щелчок, в коде вы не описали.
Да на любой.
Цитата Сообщение от CoolMind Посмотреть сообщение
Всю ли функцию getView вы написали?
да
Цитата Сообщение от CoolMind Посмотреть сообщение
Что такое getItem?
стандартный метод BaseAdapter'a
Цитата Сообщение от CoolMind Посмотреть сообщение
Несколько раз писал свои адаптеры, но не припомню, что такое new View(context).
Это пустая вьюшка
Цитата Сообщение от Spelcrawler Посмотреть сообщение
В качестве item использую свой класс который имеет поле isEnable - если оно равно false вместо нормальной строки возвращает в список new View();
0
 Аватар для Gabberr
105 / 105 / 19
Регистрация: 13.10.2009
Сообщений: 406
05.11.2014, 10:45
не нужно каждый раз создавать новую вьюху, просто управляйте видимостью текущего элемента.
Что-то типа этого:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
  @Override
  public View getView(int position, View convertView, ViewGroup parent) {
 
                View view;
                if(convertView != null){
                   view  = convertView;
                }else{
                    view = viewHolder.getLine(item);
                }
                if(getItem(position).isEnable()){
                         view.setVisivility(View.VISIBLE);
                }else{
                         view.setVisivility(View.INVISIBLE);
                }
    return view;
}
0
535 / 504 / 114
Регистрация: 12.03.2014
Сообщений: 1,671
05.11.2014, 11:34  [ТС]
Gabberr, Не работает такое в ListView. Точнее работает, но не так как ожидается. Сама вьюшка исчезает, да, но вот на ее месте остается пустое место. Делал visibility = GONE. Сейчас решил вообще свой виджет для списков написать, на основе обычного ScrollView, пока все работает быстрее чем с ListView и памяти ест меньше. Отсюда вопрос - почему принято использовать ListView, если ScrollView удобнее, проще в реализации, быстрее работает и намного более гибок? И еще вопрос в этом моем виджете при открытии отображается 10 элементов, остальные подгружаются асинхронно но мере готовности (с сетью работы нет и ничего особо тяжелого тоже, но так отрисовывается мгновенно). Дак вот если поменять высоту элемента во время подгрузки новых элементов - она меняется отлично, НО если поменять ее когда все элементы добавлены - ничего не происходит. Что это такое? Может ли это быть из-за того что мой список находится в диалоге?
0
 Аватар для Gabberr
105 / 105 / 19
Регистрация: 13.10.2009
Сообщений: 406
05.11.2014, 11:46
Вот про отличия
http://stackoverflow.com/quest... d-listview
2
535 / 504 / 114
Регистрация: 12.03.2014
Сообщений: 1,671
05.11.2014, 11:55  [ТС]
То есть, насколько я понял, разница лишь в том что ListView "заточен" под работу с данными и переводом их в изображение? То есть подразумевается, что работа с данными в ListView удобнее, чем в ScrollView? Я правильно понимаю? И если я напишу свой интерпретатор данных в изображение - разницы никакой?
0
426 / 406 / 68
Регистрация: 06.10.2012
Сообщений: 1,748
05.11.2014, 15:14
Spelcrawler, насколько я понял из указанной ссылки, поведения ScrollView и ListView достаточно сильно отличаются. Вообще, честно говоря, не думал, что одно может заменить другое.
Во-первых, элементы этих двух компонентов могут быть разными. Для ListView свойственно хранение одинаковых элементов, в ScrollView можно хранить совершенно разные вещи (не коллекции).
Во-вторых, ListView экономит память и не хранит все View сразу, а только ту часть, которую отображает.
В-третьих, ListView удачно работает с адаптерами, что позволяет проще работать с данными (и базами данных).
Пока не сравнивал по скорости, но выигрыш должен быть у ListView.
0
535 / 504 / 114
Регистрация: 12.03.2014
Сообщений: 1,671
05.11.2014, 16:03  [ТС]
CoolMind, это все так. Но во-первых: разница в потребляемой памяти не заметна (у меня ScrollView отъел меньше, чем ListView прокрученный быстро от начала до конца и обратно), если элементов около 100 или менее. Во-вторых при большом весе картинок в элементах ListView он подтормаживает при прокрутке. В-третьих: мне намного удобнее работать со ScrollView, при его использовании с каждым элементом можно творить что угодно, а вот в ListView все работает не так как ожидаешь увидеть. Теперь именно к моей задаче) У меня список из примерно 100-120 элементов и в основном всегда присутствуют одни и те же элементы, но в разном порядке и иногда некоторые нужно скрывать. Какой минус я заметил при переходе на ListView дак это только время отрисовки, но эту проблему решил асинхронным добавлением элементов. Теперь отрисовка даже быстрее чем с ListView, элементы скрываются мгновенно, скролл очень быстрый и плавный (разве что при начальном добавлении элементов тормозит примерно как на ListView при первой прокрутке, но все элементы добавляются примерно за секунду-полторы так-что не критично) и процессор не гоняю каждый раз при скролле. Дак вот теперь повторю вопрос - почему не принято использовать в случаях, подобных моему, ScrollView?
0
426 / 406 / 68
Регистрация: 06.10.2012
Сообщений: 1,748
05.11.2014, 16:17
Spelcrawler, да, это всё интересно. А как вы выполняете фильтрацию элементов по подстроке?

Добавлено через 5 минут
Точнее говоря, это делается средствами адаптера. Вопрос в том, как вы подсоединяете адаптер к ScrollView.
0
535 / 504 / 114
Регистрация: 12.03.2014
Сообщений: 1,671
05.11.2014, 17:06  [ТС]
Цитата Сообщение от CoolMind Посмотреть сообщение
А как вы выполняете фильтрацию элементов по подстроке?
Не совсем понял что это такое.
0
426 / 406 / 68
Регистрация: 06.10.2012
Сообщений: 1,748
05.11.2014, 18:04
Spelcrawler, не могу сходу найти пример. Вот здесь кусочек есть (не совсем правильный): http://www.survivingwithandroi... r-and.html
В общем, у вас есть ListView, в нём записи, например, список городов. Вы набираете в отдельном поле буквы "Ко", при этом в списке остаются Ковров, Коломна, Кострома и т.п. При этом перезаписывать список в адаптер не надо.
0
535 / 504 / 114
Регистрация: 12.03.2014
Сообщений: 1,671
05.11.2014, 18:11  [ТС]
Можно добавить поиск по строке, если не содержит строку - скрывать.
0
426 / 406 / 68
Регистрация: 06.10.2012
Сообщений: 1,748
13.11.2014, 13:40
Spelcrawler, хорошо, что затронули тему ScrollView. Наткнулся на баг. Дело в том, что мой ListView - нестандартный, он может содержать записи любого типа. Соответственно, в нём могут быть строки и с 1, и с 3 полями. Так вот, пока было 3 поля, всё работало как обычно. Сейчас добавил строки с 1 полем, и случился баг. При прокрутке приложение падает, потому что бедный ListView взамен исчезнувших записей (View) пытается подставить новые, но подставляет не тот layout. Пытается взамен исчезнувшей записи показать запись того же типа, что приводит к немедленному крэшу. Думаю, переделаю на ScrollView. Делать ListView, состоящим из двух (добавлять шапку в виде другого ListView) не стану, уже несколько месяцев назад накалывался на этом. Так что остаётся сделать правильно ScrollView. А как у вас организуется массив View? Не возникнет ли проблемы, аналогичной описанной?
0
535 / 504 / 114
Регистрация: 12.03.2014
Сообщений: 1,671
13.11.2014, 13:47  [ТС]
CoolMind, у меня проще, есть кастомная вью. Она на вход принимает id по нему из БД берет всю нужную инфу и поставляет ее в нужные места. Обычно у меня элементы по порядку id выводятся, в этом случае просто прохожусь циклом от 0 до максимального количества элементов, создаю в нем вьюшку и добавляю в ArrayList. Первые 10 элементов создаю сразу, и после создания добавляю на ListView. Потом запускаю AsynkTask, который начиная с 11 элемента и до конца генерирует мою вьюшку, добавляет в ArrayList посылает publishProgress - вьюшка добавляется в ListView.
1
426 / 406 / 68
Регистрация: 06.10.2012
Сообщений: 1,748
13.11.2014, 14:31
Spelcrawler, интересно. Так всё же, вы используете ListView или ScrollView?
У себя, вроде, решил пока проблему, немного переписал код. Не стал рисковать и всё переделывать под ScrollView, но, может быть, всё ещё впереди.
0
535 / 504 / 114
Регистрация: 12.03.2014
Сообщений: 1,671
13.11.2014, 14:33  [ТС]
CoolMind, когда как. Если нужно только отобразить что-то списком - ListView. Когда нужны всякие операции с элементами(скрытие, перемещение, анимации) - ScrollView. Вообще можно и ScrollView переписать чтобы он все умел, но долго.
0
426 / 406 / 68
Регистрация: 06.10.2012
Сообщений: 1,748
13.11.2014, 14:33
А если пользователь увидит список и начнёт крутить, то приложение не упадёт, пока работает AsyncTask?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
13.11.2014, 14:33
Помогаю со студенческими работами здесь

Скрытие и раскрытие элемента
Есть вот такой вот код: var zi_1 = document.getElementById('z_1'); var info_1 = document.getElementById('i_1'); zi_1.onclick =...

Событие на скрытие элемента
При нажатии кнопки открывается listbox, какое событие нужно обработать, чтобы при нажатии в любом месте формы или на любом элементе,...

Скрытие html элемента
возможно-ли скрыть определенный элемент на странице компонента webbrowser ?

Как осуществить прокрутку элемента управления в ListView до заданного элемента
Собственно вопрос в названии...Видел как это делают на VB если кто то может перевести с него могу предоставить...

Скрытие элемента для гостей
Здравствуйте, я не знал где точно написать в форуме PHP или JavaScript, по этому выбрал наугад, извините если не туда. Сразу к делу: ...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru