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

После вызова notifydataset() items в listview "моргают" - Программирование Android

Войти
Регистрация
Восстановить пароль
Другие темы раздела
Программирование Android Создать свой "реактор" http://www.cyberforum.ru/android-dev/thread965314.html
Как вставить СВОЙ обработчик СВОЕГО события? Пробую написать свой класс обработки мультитатча (MyMulti). За основу взял обработку onTouch. Выглядит использование примерно так: @Override ...
Программирование Android Хранение настроек пользователя Где лучше хранить настройки пользователя в Preferences или в БД? http://www.cyberforum.ru/android-dev/thread965265.html
Программирование Android Получить содержимое сайта
Здравствуйте, скажите, пожалуйста, как можно получить содержимое сайта (php файла) Я делаю так TextView title; BufferedInputStream bis; String strFileContents; ... try { ...
Программирование Android Из ListView на новую Activity
Доброго времени суток! Я делал приложение в котором из "главного меню" осуществляется переход на новую Activity. В том Activity используется ListView, который отображает 50 строк с названиями...
Программирование Android Программно изменть текст вкладки в tabhost http://www.cyberforum.ru/android-dev/thread965155.html
Всем привет! Скажите пожалуйста как можно изменить программно текст вкладки в tabhost?Например на первой вкладке расположить кнопку, и в обработчике события написать код который изменяет заголовок...
Программирование Android Какого размера делать приложение? Дали задание: написать приложение, а для какого экрана не сказали. Можно ли как-то сделать приложение, экран которого будет универсальным (подстраиваться под любой размер)? подробнее

Показать сообщение отдельно
ta4
0 / 0 / 0
Регистрация: 09.05.2012
Сообщений: 19

После вызова notifydataset() items в listview "моргают" - Программирование Android

30.09.2013, 04:11. Просмотров 1723. Ответов 30
Метки (Все метки)

столкнулся с такой проблемой, перерыл stackoverflow, ответа не нашел
есть список listview, который показывает картинки, загружая их из сети/кэша.
для него адаптер у которого есть функция getView()
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
 public View getView(int i, View view, ViewGroup viewGroup) {
        ViewHolder vh;
        ImageView imageView;
        Image image = (Image)getItem(i);
        if (view==null)
        {
            inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            view = inflater.inflate(R.layout.item, null);
            vh = new ViewHolder();
            vh.imageView = (ImageView) view.findViewById(R.id.imageView);
            view.setTag(vh);
        }
        vh = (ViewHolder)view.getTag();
        vh.i = i;
        imageView = vh.imageView;
        imageView.getLayoutParams().height = (int)getImageViewHeight(image.getHeight(),image.getWidth(),context.getResources().getDisplayMetrics().widthPixels, context.getResources().getDisplayMetrics().density);
 
        Log.e("SSS",String.valueOf(listView.getFirstVisiblePosition()+" "+i));
        imageView.setImageBitmap(null);
 
        imageLoader.displayImage(items.get(i).getLink(), imageView, options);
 
        return view;
чтобы добиться плавности прокрутки использую ViewHolder. После добавления новых элементов в список, вызываю notifydataset(). Все элементы в списке перерисовываются, соответственно картинки также перезагружаются (если картинка была в памяти, то она быстро перезагружается, но все же заметно, т.е. на долю секунды imageView становится пустым).
Если не использовать ViewHolder, то все нормально. Картинки которые пользователь сейчас видит не обновляются. Но при это производительность немного прокрутки списка падает.

Для загрузки картинок использую Universal Image Loader. Почти уверен что дело не в нем, т.к. пробовал обходиться и без него.
На всякий случай настроки UIL
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
options = new DisplayImageOptions.Builder()
                .cacheInMemory(true)
                .imageScaleType(ImageScaleType.EXACTLY_STRETCHED)
                .cacheOnDisc(true)     
                .build();
        config = new ImageLoaderConfiguration.Builder(contex
                .tasksProcessingOrder(QueueProcessingType.FIFO) 
                //.denyCacheImageMultipleSizesInMemory()
                .discCacheSize(3 * 1024 * 1024)
                .threadPriority(Thread.NORM_PRIORITY-1)
                .threadPoolSize(3) // default
                .memoryCacheSize(3 * 1024 * 1024)
                .writeDebugLogs()
                .build();
Не знаю куда копать уже даже....
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru