В одном из моих действий у меня есть ListView, который отображает список местоположений. Для каждого элемента списка мне нужен маленький значок стрелки, указывающий направление соответствующего местоположения. Я реализовал этот значок, расширив ImageView. В этом пользовательском представлении есть прослушиватель, который реагирует на изменения ориентации устройства, соответствующим образом поворачивая изображение значка. Я регистрирую прослушиватель в методе onAttachedToWindow() и отменяю его регистрацию в onDetachedFromWindow(). Этот вид работает, но проблема в том, что onDetachedFromWindow() иногда вызывается только спустя долгое время после того, как содержащее действие было приостановлено. Кроме того, весь макет в целом кажется немного хакерским. Итак, мой вопрос: есть ли правильный способ отменить регистрацию слушателей или вы бы для начала реализовали это совершенно другим способом?
Android: определить, приостановлена ли родительская активность View
Ответы (1)
Я думаю, у вас проблемы, потому что ваш дизайн хакерский, как вы признаете. Я думаю, что вам, вероятно, следует сделать так, чтобы ваша активность прослушивала ориентацию устройства и использовала onPause/onResume
для обработки регистрации изменений ориентации. Затем создайте собственный курсор, который обновляется действием при его изменении. Затем пользовательский курсор может вызвать notifyDataSetChanged
, чтобы сообщить ListView
об обновлении. Затем в вызове getView
вы можете передать данные, необходимые для правильного отображения вашей стрелки. Таким образом, будут обновлены только те стрелки, которые видны. У вас будет только одно место, где вы получаете данные об ориентации, а позже вы сможете обработать onScrollStateChanged
и перестать обновлять стрелки, когда пользователь прокручивает, если это слишком сильно влияет на анимацию прокрутки.