Я работаю над приложением, которое показывает некоторые места в списке. В каждом элементе списка есть стрелка, указывающая на место (отель, бар и т. д.).
Проблема в том, что я не знаю, как эффективно обновлять эту стрелку, без локального кэширования просмотров (что, согласно видео Google I/O, я никогда не должен делать).
Стрелка должна обновляться при каждом событии датчика ориентации телефона, что происходит много раз в секунду.
Итак, есть ли лучший подход, чем вызов notifyDataSetChanged() для каждого события и повторное заполнение данных каждого элемента списка?
ОБНОВЛЕНИЕ (для @dharan и всех, кто заинтересован):
Я прекратил работу над этим проектом, потому что теперь у меня есть работа на полную ставку, но я придумал решение (нереализованное/непроверенное).
Сначала ограничьте угол поворота фиксированным шагом (например: 5, 10, 15, 20, ... 355, 360), затем кэшируйте повернутое изображение для каждого угла поворота, чтобы избежать дорогостоящих вычислений поворота изображения (но при более высокая стоимость памяти).
После этого я заставлю свой метод getView() знать, когда обновлять только изображение, а не все данные. В моем случае это так же просто, как:
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView != null && place[position].id == (Integer)convertView.getTag()){
//the place information is already set correctly so just update the image
}
...
}
После этих изменений я считаю, что вызов notifyDataSetChanged() не должен вызывать серьезных проблем с производительностью.
View
из строки вListView
, вы должны использоватьnotifyDataSetChanged()
, поэтому у вас нет альтернатив. Часть проListView
+ вызовnotifyDataSetChanged
много раз в секунду звучит не очень хорошо. - person user   schedule 19.05.2012