2010-06-20 63 views
1

在我的其中一個活動中,我有一個顯示位置列表的ListView。對於每個列表項目,我需要一個指向相應位置方向的小箭頭圖標。我通過擴展ImageView來實現這個圖標。此自定義視圖具有一個偵聽器,通過相應地旋轉圖標圖像來響應設備方向的更改。我在onAttachedToWindow()方法中註冊偵聽器,並在onDetachedFromWindow()中註銷它。這種工作,但問題是onDetachedFromWindow()有時僅在包含的Activity已經暫停後才被調用很長時間。此外,整體佈局總體上看起來有點冒險。所以我的問題是:有沒有正確的方式來註銷聽衆,或者你會以完全不同的方式來實現這個開始?Android:檢測視圖的父活動是否暫停

回答

1

我覺得你有困難,因爲你的設計是像你承認的哈克。我認爲你應該做的是讓你的活動聽取設備方向,並使用onPause/onResume來處理註冊方向變化。然後有一個自定義的光標,當它發生變化時由Activity更新。自定義光標然後可以調用notifyDataSetChanged來告訴ListView更新。然後在getView調用中,您可以傳入箭頭所需的數據以正確顯示。這樣,只有那些可見的箭頭纔會被更新。您只有一個地方接收方向數據,稍後您可以處理onScrollStateChanged,並在用戶滾動時停止更新箭頭(如果它太多地影響滾動動畫)。

+0

非常感謝!在Activity中聽取方向似乎是正確的,因爲不需要在多個地方執行此操作,而Activity也是我可以使用onPause和onStart的唯一位置。然而,我開始以這種方式實現它,並發現了一個新問題:以這樣高的頻率調用notifyDataSetChanged對性能影響更大,因爲getView還會更新有關列表項的其他所有內容。必須有一種方法來確保只有圖標受到這些更新的影響。現在我該怎麼做? – 2010-06-21 23:01:53