Android: обнаружение, если родительская активность представления приостановлена - PullRequest
1 голос
/ 21 июня 2010

В одном из моих занятий у меня есть ListView, который отображает список местоположений.Для каждого элемента списка я хочу маленький значок стрелки, который указывает в направлении соответствующего местоположения.Я реализовал этот значок, расширив ImageView.Этот пользовательский вид имеет слушателя, который реагирует на изменения ориентации устройства, соответственно поворачивая изображение значка.Я регистрирую слушателя в методе onAttachedToWindow () и отменяю его регистрацию в onDetachedFromWindow ().Этот вид работает, но проблема в том, что onDetachedFromWindow () иногда вызывается только долгое время после приостановки содержащейся операции.Кроме того, весь макет в целом выглядит немного хакерским.Итак, мой вопрос: существует ли правильный способ отменить регистрацию слушателей, или вы бы начали реализовывать это совершенно по-другому?

1 Ответ

1 голос
/ 21 июня 2010

Я думаю, у вас возникли трудности, потому что ваш дизайн хакерский, как вы признаете. Я думаю, что вам, вероятно, следует сделать так, чтобы ваш Activity прослушивал ориентацию устройства и использовал onPause/onResume для регистрации изменений ориентации. Затем создайте пользовательский курсор, который обновляется операцией при его изменении. Затем пользовательский курсор может вызвать notifyDataSetChanged, чтобы сообщить ListView об обновлении. Затем в вызове getView вы можете передать данные, необходимые для правильного отображения стрелки. Таким образом, обновляются только те стрелки, которые видны. У вас будет только одно место, где вы получаете данные об ориентации, и позже вы сможете обработать onScrollStateChanged и прекратить обновлять стрелки, когда пользователь выполняет прокрутку, если это слишком сильно влияет на анимацию прокрутки.

...