да? а что если данные типа "массив"? каким образом тогда там данные изменять? вот был у меня массив как данные, в адаптере, с 10 элементами, а новый пришел с 11. Как мне изменить данные?новый адаптер не создается, Просто изменяется дата аррейлиста и вызывается нотифай
Категоризация в ListView
- Mikhail_dev
- Сообщения: 2386
- Зарегистрирован: 09 янв 2012, 14:45
- Откуда: Самара
Re: Категоризация в ListView
Re: Категоризация в ListView
В getView() ты получаешь item - элемент аррей листа, который используется при отрисовке вью. Как я понимаю при "нотифай" адаптер пробегает по своему аррейлисту отрисовывая с помощью getView(). Т.е. для обновления просто очищается старый лист:Mikhail_dev писал(а):да? а что если данные типа "массив"? каким образом тогда там данные изменять? вот был у меня массив как данные, в адаптере, с 10 элементами, а новый пришел с 11. Как мне изменить данные?новый адаптер не создается, Просто изменяется дата аррейлиста и вызывается нотифай
list.clear();
list.addAll( newList );
...notifyDataSetChanged();
Семь раз отмерь - поставь студию.
Эклипс не студия, ошибка вылетит - не исправишь.
Скажи мне кто твой друг, и оба поставили студию.
Студия - свет, а эклипс - тьма.
Эклипс не студия, ошибка вылетит - не исправишь.
Скажи мне кто твой друг, и оба поставили студию.
Студия - свет, а эклипс - тьма.
- Mikhail_dev
- Сообщения: 2386
- Зарегистрирован: 09 янв 2012, 14:45
- Откуда: Самара
Re: Категоризация в ListView
Да причем тут ArrayList, когда я в конструктор передаю массив? Как его потом предлагаешь изменять? Как изменить final размер массива? И что если данные мне пришли в другой коллекции? Перезатирать, подставляя эти? Безумие.
С массивами точно не прокатит.
С массивами точно не прокатит.
Re: Категоризация в ListView
Зачем тебе обычные массивы? использую динамические тот же аррей лист, перегоняй дату из массива в элементы коллекции. Для добавления новых элементов достаточноMikhail_dev писал(а):Да причем тут ArrayList, когда я в конструктор передаю массив? Как его потом предлагаешь изменять? Как изменить final размер массива? И что если данные мне пришли в другой коллекции? Перезатирать, подставляя эти? Безумие.
С массивами точно не прокатит.
сгенерить новый элемент и кинуть в конец листа.
list.add( new myItem( 1, "blabla", 123 ) ) ;
notify...
Семь раз отмерь - поставь студию.
Эклипс не студия, ошибка вылетит - не исправишь.
Скажи мне кто твой друг, и оба поставили студию.
Студия - свет, а эклипс - тьма.
Эклипс не студия, ошибка вылетит - не исправишь.
Скажи мне кто твой друг, и оба поставили студию.
Студия - свет, а эклипс - тьма.
Re: Категоризация в ListView
Вот еще пример перегона обычного массива в аррей, вполне нормальная практика.
http://stackoverflow.com/a/157950
Зачем подстраивать адаптер под массивы, когда можно массив подстроить(перегнать в коллекцию) под адаптер.
http://stackoverflow.com/a/157950
Зачем подстраивать адаптер под массивы, когда можно массив подстроить(перегнать в коллекцию) под адаптер.
Семь раз отмерь - поставь студию.
Эклипс не студия, ошибка вылетит - не исправишь.
Скажи мне кто твой друг, и оба поставили студию.
Студия - свет, а эклипс - тьма.
Эклипс не студия, ошибка вылетит - не исправишь.
Скажи мне кто твой друг, и оба поставили студию.
Студия - свет, а эклипс - тьма.
- Mikhail_dev
- Сообщения: 2386
- Зарегистрирован: 09 янв 2012, 14:45
- Откуда: Самара
Re: Категоризация в ListView
скажи мне, как я должен обновить данные, даже если он не массив, если у меня НОВЫЙ ArrayList с данными?Предлагаешь чистить первый и потом добавлять со второго все данные в первый?
edit я уже с этой темой связывался, там обычно начинаются некоторые сложности, такие как вот эти http://stackoverflow.com/a/20479071/4763961
А то что массивы нельзя использовать, это минус. В некоторых местах у меня массивы и я не хочу их менять с точки зрения оптимизации. Создание объекта всегда трудозатратная процедура
edit я уже с этой темой связывался, там обычно начинаются некоторые сложности, такие как вот эти http://stackoverflow.com/a/20479071/4763961
А то что массивы нельзя использовать, это минус. В некоторых местах у меня массивы и я не хочу их менять с точки зрения оптимизации. Создание объекта всегда трудозатратная процедура
Re: Категоризация в ListView
Под reinitialize имеется в виду list = новыйЛистMikhail_dev писал(а):скажи мне, как я должен обновить данные, даже если он не массив, если у меня НОВЫЙ ArrayList с данными?Предлагаешь чистить первый и потом добавлять со второго все данные в первый?
edit я уже с этой темой связывался, там обычно начинаются некоторые сложности, такие как вот эти http://stackoverflow.com/a/20479071/4763961
А то что массивы нельзя использовать, это минус. В некоторых местах у меня массивы и я не хочу их менять с точки зрения оптимизации. Создание объекта всегда трудозатратная процедура
Ответ был выше, да и в ссылке тоже:
лист.clear()
лист.addAll( newList )
notify..
Семь раз отмерь - поставь студию.
Эклипс не студия, ошибка вылетит - не исправишь.
Скажи мне кто твой друг, и оба поставили студию.
Студия - свет, а эклипс - тьма.
Эклипс не студия, ошибка вылетит - не исправишь.
Скажи мне кто твой друг, и оба поставили студию.
Студия - свет, а эклипс - тьма.
Re: Категоризация в ListView
Как вариант можно обновлять свойства(значения полей) старых объектов и когда один из массивов закончится удалять оставшиеся в старом, или добавлять в конец оставшиеся в новом.
Семь раз отмерь - поставь студию.
Эклипс не студия, ошибка вылетит - не исправишь.
Скажи мне кто твой друг, и оба поставили студию.
Студия - свет, а эклипс - тьма.
Эклипс не студия, ошибка вылетит - не исправишь.
Скажи мне кто твой друг, и оба поставили студию.
Студия - свет, а эклипс - тьма.
Re: Категоризация в ListView
Еще можно попробовать хранить массив в адаптере и обращаться к нему по position. + ручное обновление. Тогда нужно придумать, что класть в аррейлист в конструткоре.
Семь раз отмерь - поставь студию.
Эклипс не студия, ошибка вылетит - не исправишь.
Скажи мне кто твой друг, и оба поставили студию.
Студия - свет, а эклипс - тьма.
Эклипс не студия, ошибка вылетит - не исправишь.
Скажи мне кто твой друг, и оба поставили студию.
Студия - свет, а эклипс - тьма.
- Mikhail_dev
- Сообщения: 2386
- Зарегистрирован: 09 янв 2012, 14:45
- Откуда: Самара
Re: Категоризация в ListView
Это называется наплодить кучу новых объектов. Это очень плохой вариант. Ты вместо того, чтобы взять эти объекты, делаешь их клоны и суёшь в новый массив. и получится что там, где можно работать с уже готовыми объектами, ты будешь делать в два раза больше объектов. Не рекомендую им пользоваться (разве что тебе без разницы на батарею, нагрузку на ЦП и подобное, ну или данные редко обновляются)doter.ua писал(а):Под reinitialize имеется в виду list = новыйЛистMikhail_dev писал(а):скажи мне, как я должен обновить данные, даже если он не массив, если у меня НОВЫЙ ArrayList с данными?Предлагаешь чистить первый и потом добавлять со второго все данные в первый?
edit я уже с этой темой связывался, там обычно начинаются некоторые сложности, такие как вот эти http://stackoverflow.com/a/20479071/4763961
А то что массивы нельзя использовать, это минус. В некоторых местах у меня массивы и я не хочу их менять с точки зрения оптимизации. Создание объекта всегда трудозатратная процедура
Ответ был выше, да и в ссылке тоже:
лист.clear()
лист.addAll( newList )
notify..
Это не всегда получится. У меня к примеру межпроцессорное взаимодействие, и получение данных всегда является новым объектом, собранным из parcelable. И выбрасывать новые, готовые объекты, как-то неверно.doter.ua писал(а):Как вариант можно обновлять свойства(значения полей) старых объектов и когда один из массивов закончится удалять оставшиеся в старом, или добавлять в конец оставшиеся в новом.
И вот ты только что сказал, что делается в BaseAdapter! Переопределяешь наипростейшие методы, пишешь один метод сеттера и можешь как угодно изменять эти объекты (можно даже эксклюзивно взять LinkedHashMap и подобные), вызывая стандартный notifyDataChanged.Еще можно попробовать хранить массив в адаптере и обращаться к нему по position.
Re: Категоризация в ListView
Вопрос заключался в том, как обновить АррейАдаптер. У бейзАдаптера больше свободы, а у АррейАдаптера меньше кода.Mikhail_dev писал(а): И вот ты только что сказал, что делается в BaseAdapter! Переопределяешь наипростейшие методы, пишешь один метод сеттера и можешь как угодно изменять эти объекты (можно даже эксклюзивно взять LinkedHashMap и подобные), вызывая стандартный notifyDataChanged.
Семь раз отмерь - поставь студию.
Эклипс не студия, ошибка вылетит - не исправишь.
Скажи мне кто твой друг, и оба поставили студию.
Студия - свет, а эклипс - тьма.
Эклипс не студия, ошибка вылетит - не исправишь.
Скажи мне кто твой друг, и оба поставили студию.
Студия - свет, а эклипс - тьма.
- Mikhail_dev
- Сообщения: 2386
- Зарегистрирован: 09 янв 2012, 14:45
- Откуда: Самара
Re: Категоризация в ListView
Это не обновление ЭррейАдаптера, это извращение, потому что ты делаешь клон объектов.
лист.clear()
лист.addAll( newList )
Re: Категоризация в ListView
Не вижу смысла в ЛистВью и ему подобных с заоблачным кол-во элементов. Выводить инфу нужно уже отсортированной, юзер не будет скролить список из 10 000 элементов. Следовательно производительности для таких "нерациональных операций" должно хватать с головой.Mikhail_dev писал(а):Это не обновление ЭррейАдаптера, это извращение, потому что ты делаешь клон объектов.лист.clear()
лист.addAll( newList )
Семь раз отмерь - поставь студию.
Эклипс не студия, ошибка вылетит - не исправишь.
Скажи мне кто твой друг, и оба поставили студию.
Студия - свет, а эклипс - тьма.
Эклипс не студия, ошибка вылетит - не исправишь.
Скажи мне кто твой друг, и оба поставили студию.
Студия - свет, а эклипс - тьма.
- Mikhail_dev
- Сообщения: 2386
- Зарегистрирован: 09 янв 2012, 14:45
- Откуда: Самара
Re: Категоризация в ListView
Если не видно разницы, зачем плодить алгоритм который будет работать всегда медленнее, в два раза будет больше мусорить что негативно отразится на GC и батарее? А ведь GC - это блокировка UI потока со всеми вытекающими. Лень дописать ТРИ метода?
[syntax=java5]
@Override
public int getCount() {
return mData.size();
}
@Override
public ContactInfo getItem(int position) {
return mData.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
[/syntax]
[syntax=java5]
@Override
public int getCount() {
return mData.size();
}
@Override
public ContactInfo getItem(int position) {
return mData.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
[/syntax]
Re: Категоризация в ListView
Не царское это дело - код оптимизировать.Mikhail_dev писал(а):Если не видно разницы, зачем плодить алгоритм который будет работать всегда медленнее, в два раза будет больше мусорить что негативно отразится на GC и батарее? А ведь GC - это блокировка UI потока со всеми вытекающими. Лень дописать ТРИ метода?
[syntax=java5]
@Override
public int getCount() {
return mData.size();
}
@Override
public ContactInfo getItem(int position) {
return mData.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
[/syntax]
Семь раз отмерь - поставь студию.
Эклипс не студия, ошибка вылетит - не исправишь.
Скажи мне кто твой друг, и оба поставили студию.
Студия - свет, а эклипс - тьма.
Эклипс не студия, ошибка вылетит - не исправишь.
Скажи мне кто твой друг, и оба поставили студию.
Студия - свет, а эклипс - тьма.
Re: Категоризация в ListView
doter.ua, та давно надо было сливаться с этой беседы
R.id.team
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
Re: Категоризация в ListView
А ну раз тут начали говорить на такие темы. Столкнулся с проблемой обновления данных в списке. Точнее не то чтобы с проблемой, данные то обновляются, но думаю совсем не оптимально.
Суть: Из сервиса на ui приходит партия Parcelable объектов из которых составляется список. Обновлять их нужно раз в секунду (все изменения с объектами происходят в сервисе и часто, хотя некоторые объекты могут находиться в состоянии "покоя").
Собственно сейчас обновляется так (BaseAdapter):
[syntax=java5]public void update(ArrayList<MyParcelableObject> dataList) {
this.dataList = dataList;
notifyDataSetChanged();
}[/syntax]
На практике объектов не много (1-10), в теории не ограничено (но все равно вряд ли больше 100). ViewHolder имеется.
Собственно на чем стоит заморочиться, и так чтобы эти заморочки не были убыточнее текущей реализации?
Суть: Из сервиса на ui приходит партия Parcelable объектов из которых составляется список. Обновлять их нужно раз в секунду (все изменения с объектами происходят в сервисе и часто, хотя некоторые объекты могут находиться в состоянии "покоя").
Собственно сейчас обновляется так (BaseAdapter):
[syntax=java5]public void update(ArrayList<MyParcelableObject> dataList) {
this.dataList = dataList;
notifyDataSetChanged();
}[/syntax]
На практике объектов не много (1-10), в теории не ограничено (но все равно вряд ли больше 100). ViewHolder имеется.
Собственно на чем стоит заморочиться, и так чтобы эти заморочки не были убыточнее текущей реализации?
- Mikhail_dev
- Сообщения: 2386
- Зарегистрирован: 09 янв 2012, 14:45
- Откуда: Самара
Re: Категоризация в ListView
Ни над чем. У меня аналогичная модель работы, один в один. С сервиса уже приходят parcelable объекты. Если объекты уже есть, то не стоит больше с ними ничего делать, разве что отсортировать их. Если бы приходили данные для обновления в каком-нибудь JSON, то можно было бы оптимизировать, просто обновляя информацию, но если объект уже есть, то нечего и затрачивать ресурсы на обновление того, что уже имеется.
Оптимизировать тут можно то, чтобы данные не обновлялись тогда, когда ты не наблюдаешь в данный момент список. Ну я думаю это и так понятно.
Оптимизировать тут можно то, чтобы данные не обновлялись тогда, когда ты не наблюдаешь в данный момент список. Ну я думаю это и так понятно.
-
- Сообщения: 122
- Зарегистрирован: 18 ноя 2013, 17:53
Re: Категоризация в ListView
Lucifer777 писал(а):не думал, что настолько простенько.Foenix писал(а):кастомный листвью, где слева картинка, буква, меняющая свою видимость. Очень простенько.
Попробовал так. Фигня получается, глючит.
Нужно, какой-то хитрый для listview footer написать.
Re: Категоризация в ListView
значит сделал не так, у меня таких листвью полно - нигде не глючит ничего.
R.id.team
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198