2013-08-30 44 views
1

強制適配器重繪只有特定的項目是否有可能?如何重繪只適配器中的一個視圖

目前如果我想重畫列表,我打電話notifyDataSetChanged(),它重新遍歷所有數據集並重繪所有元素。如果我確切知道哪些元素已更新,並且只想重新繪製那一個元素,該怎麼辦?

+0

you_view.invalidate()? –

+0

但是,如果它是由適配器生成的,你如何訪問該視圖? –

+0

在調用'invalidate()'之前,您需要更新視圖的值(調用'setText()'等),這通常在適配器中完成。 –

回答

0

沒有這樣的方法,沒有那麼糟糕,因爲沒有整個數據集被重新迭代,並且並非所有元素都被重繪,而只是當前可見的元素。這些通常不是那麼多。

0

您可以使用Map創建singletone對象。然後把你的對象的每個視圖放到這張地圖上。畢竟,您可以更改此對象,重繪您指定的視圖(您必須知道位置),然後致電notifyDataSetChanged()

1

notifyDataSetChanged()不適用於重新繪製元素,它用於通知適配器,元素已經以某種方式發生了變化,例如有更多的元素,或者它們的數據是從其他類中設置的等等。當然,ListView (或其他類),適配器連接到的其他類將重繪元素,因爲適配器被強制告訴他,其數據集已更改。
作爲Yume117評論,重繪你可以調用一個Viewinvalidate()方法(甚至更好postInvalidate()),

postInvalidate():
導致一個無效通過事件循環在隨後的週期 發生。

public void invalidate() 

Added in API level 1 
Invalidate the whole view. If the view is visible, onDraw(android.graphics.Canvas) will be called at some point in the future. This must be called from a UI thread. To call from a non-UI thread, call postInvalidate(). 

你可以叫上一個視圖這些方法在AdaptergetView()方法,或來電無效的ListView控件(或其他視圖)本身,它只會重繪可見的元素。

相關問題