Страница 1 из 1

Таймер в ListView

Добавлено: 25 июн 2014, 13:51
EspanaMia
Подскажите, имеется ListView в котором выводится таймер. Проблема в том, что заметны подтормаживания, сейчас используется следующий код:

Код: Выделить всё

int mTimeSecond, mTimeMinute, mTimeHour;

final Handler timerHandler = new Handler(); 
		Runnable timerRunnable = new Runnable() { 
		    @Override
		    public void run() {
				    	
		    	mTimeSecond = mTimeSecond + 1;
		    	if (mTimeSecond >= 60) {
		    		mTimeSecond = 0; 
		    		mTimeMinute = mTimeMinute + 1;		    	
		    	}
		    	if (mTimeMinute >= 60) {
		    		mTimeMinute = 0;
		    		mTimeHour = mTimeHour + 1;		    	
		    	}
		 
		    	adapter.notifyDataSetChanged();
		    	
		        timerHandler.postDelayed(this, 1000);   
		    }
		}; 
		 
		timerHandler.postDelayed(timerRunnable, 500);
т.е. адаптер(ListView) обновляется каждую секунду, как это можно оптимизировать ?

Re: Таймер в ListView

Добавлено: 25 июн 2014, 15:24
anber
Подтормаживания в ListView это вообще эпичная проблема над которой безуспешно бьются бьются целые команды программистов :)

По сабжу- приведенный фрагмент кода - ниочем. Ну да - видно что adapter.notifyDataSetChanged(); вызывается раз в секунду. О том зачем это делается ни слова.
Исходя из этого решение - обновлять не раз в секунду а раз в 10 секунд :lol:

Но если серьезно - покажи что в getView() происходит и чем вызвана необходимость раз в секунду обновлять ListView()

Re: Таймер в ListView

Добавлено: 25 июн 2014, 16:29
altwin
Есть же куча рабочих примеров, например: http://stackoverflow.com/a/20266067/2611075 зачем вообще заводить переменные под минуты, секунда и т.д. и еще вычислять что -то с ними
ну или есть же подобные стандартные штуки - http://developer.android.com/intl/ru/re ... Timer.html
а listview как и другое в android всегда будет подтормаживать... это же java.

Re: Таймер в ListView

Добавлено: 25 июн 2014, 17:53
KamiSempai
Обновление списка достаточно дорогая операция. Лучше сделать так, что бы строки списка обновлялись без обновления самого списка.
Например, можно сделать через обсерверы. При создании, View регистрируется на изменение таймера и каждую секунду она будет оповещена об этом.

Re: Таймер в ListView

Добавлено: 26 июн 2014, 09:26
EspanaMia
anber писал(а):чем вызвана необходимость раз в секунду обновлять ListView()
необходимость в том, чтобы отобразить изменения секунд у таймера.
KamiSempai писал(а):можно сделать через обсерверы. При создании, View регистрируется на изменение таймера и каждую секунду она будет оповещена об этом.
спасибо за совет, можно увидеть пример реализации ?