當我的代碼滿足某些條件時,我需要更新我的ListView
(每行包含多個視圖)的每一行中的僅一個View
。有沒有一種方法只定位更新的視圖?Android:更新列表視圖行
我試過設置一個標誌,然後調用notifyDataSetChanged()
,但是,我怎麼知道notifyDataSetChanged()
已完成調用getView(...)
目前可見的項目?
當我的代碼滿足某些條件時,我需要更新我的ListView
(每行包含多個視圖)的每一行中的僅一個View
。有沒有一種方法只定位更新的視圖?Android:更新列表視圖行
我試過設置一個標誌,然後調用notifyDataSetChanged()
,但是,我怎麼知道notifyDataSetChanged()
已完成調用getView(...)
目前可見的項目?
Boolean updateViewsFlag = true;
//內部getView():
if(updateViewsFlag) {
//Suppose you want to update some text in a textView
textView.setText("updatedText");
//Also, update the corresponsing value in the Collection,
//you're using to generate the ListView.
//Consider an ArrayList<String> for this case.
arrayList.set(position, "updatedText");
} else {
textView.setText(arrayList.get(position));
}
要找出是否notifyDataSetChanged()
完成或沒有,檢查如果當前視圖的位置等於該ArrayList的大小。如果是,則表示所有視圖都已刷新,您可以將該標誌設置爲false。但請記住,getView()
將被執行多次,因此請確保您不要不必要地更改標誌值。
我認爲假設您將在getView方法中獲得完全相同的視圖對象並不安全。 如何使用下面的解決方案?
How can I update a single row in a ListView?
其實getChildAt也沒有那麼多安全的,因爲描述是不準確的,但我想,如果這個工程,Android團隊並不需要去改變。
http://developer.android.com/reference/android/view/ViewGroup.html#getChildAt(int)
當前可見的視圖將立即更新。但是,該標誌應保持其狀態,因爲適配器可能會在進入和退出屏幕時重新繪製視圖。 –
由於實現的原因,在視圖更新之後,應立即忽略標誌AND。該標誌表示只有一些行內容需要更新。 –