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

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

Войти
Регистрация
Восстановить пароль
 
ILNAR_93
Android
221 / 221 / 23
Регистрация: 19.01.2013
Сообщений: 1,681
Записей в блоге: 3
#1

Показывать или скрывать записи в адаптере - Программирование Android

26.07.2016, 10:44. Просмотров 182. Ответов 8
Метки нет (Все метки)

Создаю адаптер со всеми записями для RecycleView

а потом нажимаю кнопку и меняю условие отображение (например должны отображаться только те записи у которых поле vis == true)

Вопрос:

Нужно каждый раз при смене условия отображения создавать новый адаптер или есть более правильные и быстрые способы обновления контента RecycleView согласно условиям?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.07.2016, 10:44
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Показывать или скрывать записи в адаптере (Программирование Android):

NullPointerException в адаптере RecyclerView - Программирование Android
Здравствуйте уважаемые форумчане! Столкнулся с такой проблемой, в RecyclerView создаю адаптер для добавления карточек, в карточке, в...

Убить поток в адаптере - Программирование Android
После Делфи не до конца понимаю работу "сборщика мусора" Явы. Привык "подчищать" за собой сам. Есть адаптер на основе BaseAdapter В...

Поиск по ListView основанному на кастомном адаптере - Программирование Android
Есть кастомный адаптер. ListView сделан на его основе. Данные загружаются из БД. Делаю поиск по позициям листа. Дописал в класс кастомного...

Назначить идентификаторы кнопкам в адаптере списка - Программирование Android
Есть цикл генерации данных для адаптера списка void fillData() { for (int i = 1; i <= 17; i++) { String...

Загрузки изображений из сети в адаптере GridView - Программирование Android
Загружаю картинки в адаптере gridview: //.. viewHolder.name.setText(arrayList.get(position).get("name")); ...

Не обновлять айтемы в адаптере когда скроллим список - Программирование Android
Такая проблема, есть адаптер с чекбоксами, я выбираю чекбоксы, потом опускаю список ниже, подымаю его и эти чекбоксы снова сняты, как этого...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Mikalai
256 / 232 / 93
Регистрация: 11.01.2015
Сообщений: 655
26.07.2016, 11:13 #2
После изменения условий вызови в адаптере notifyDataSetChanged.
ILNAR_93
Android
221 / 221 / 23
Регистрация: 19.01.2013
Сообщений: 1,681
Записей в блоге: 3
26.07.2016, 11:14  [ТС] #3
Mikalai, т.е. просто заменяю адаптер и делаю notifyDataSetChanged?

Спасибо
petruchodd
90 / 90 / 8
Регистрация: 23.06.2009
Сообщений: 511
26.07.2016, 12:35 #4
ты когда передаешь в адаптер какие-то ресурсы (например arraylist<string>) , то когда делаешь изменения в этом листе , просто вызываешь notifyDataSetChanged() после изменений и адаптер поймет, что нужно перерисовать данные.
ILNAR_93
Android
221 / 221 / 23
Регистрация: 19.01.2013
Сообщений: 1,681
Записей в блоге: 3
26.07.2016, 14:09  [ТС] #5
Делаю так:
Java
1
2
3
4
5
6
7
8
lst - меняю как надо по условию (в итоге там 0 элементов)
 
adapter = new PeopleNearListAdapter(lst, getActivity());
        if (lvMain.getAdapter()!=null){
            lvMain.getAdapter().notifyDataSetChanged(); // так нечего не меняется, а если вместо этого выполнить lvMain.setAdapter(adapter); то все работает 
        } else {
            lvMain.setAdapter(adapter);
        }
CoolMind
418 / 401 / 65
Регистрация: 06.10.2012
Сообщений: 1,727
26.07.2016, 16:31 #6
ILNAR_93, у вас стоит условие смены адаптера. Причём, меняете вы его только первый раз, а когда он уже присвоен, то просто перерисовываете. Однако здесь и кроется ошибка. Скорее всего, вы пересоздаёте коллекцию lst, в итоге адаптер обращается к старой коллекции, которая уже находится в "мусоре", и выводит 0 записей.
ILNAR_93
Android
221 / 221 / 23
Регистрация: 19.01.2013
Сообщений: 1,681
Записей в блоге: 3
26.07.2016, 16:42  [ТС] #7
CoolMind,
по условию там должно быть 0 записей - т.е. нет в БД записей которые соответствуют условию
в итоге мой listview должен быть пустым, а он не меняется (как будто не срабатывает notifyDataSetChanged)


Вроде начал понимать вашу мысль ) Сейчас посмотрю

Добавлено через 35 секунд
Java
1
2
3
4
5
6
7
if (lvMain.getAdapter()!=null){
            adapter.nearPeoples = lst;
            lvMain.getAdapter().notifyDataSetChanged(); 
        } else {
            adapter = new PeopleNearListAdapter(lst, getActivity());
            lvMain.setAdapter(adapter);
        }
Pablito
2474 / 1919 / 596
Регистрация: 12.05.2014
Сообщений: 6,747
Завершенные тесты: 1
26.07.2016, 16:46 #8
та шо там понимать, он говорит о том, что неправильно пересоздавать список каждый раз
список должен быть один, просто туда записи накидывать через add или удалять remove
и тогда будет работать notifi и не нужно будет каждый раз делать setAdapter
ILNAR_93
Android
221 / 221 / 23
Регистрация: 19.01.2013
Сообщений: 1,681
Записей в блоге: 3
26.07.2016, 16:47  [ТС] #9
Паблито, понял
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.07.2016, 16:47
Привет! Вот еще темы с ответами:

Filterable не понимаю как в адаптере взять String значение по позиции ? - Программирование Android
fragment: inputSearch.addTextChangedListener(new TextWatcher() { @Override public void...

Как брать путь картинки в sqlite, и сетить на айтем в адаптере? - Программирование Android
Добрый день! подскажите пожалуйста как это делается? в getView() адаптера так: titleI =...

Скрывать Toolbar при пролистывании ListView - Программирование Android
Подскажите как реализовать, когда листаешь ListView, что бы Toolbar исчезал? Спасибо)

Скрывать или показывать элементы по клику - JavaScript
Здравствуйте. Есть такая проблема: есть 6 картинок, три показываются изначально. Необходимо чтобы при нажатии на первую появлялась...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
26.07.2016, 16:47
Ответ Создать тему
Опции темы

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