ListView中getChildAt(index)的使用

1.原理 
在很多時候ListView列表數據不需要全部刷新,只需刷新有數據變化的那一條,這時可以用getChildAt(index)獲取某個指定position的view,並對該view進行刷新。 

注意:在ListView中,使用getChildAt(index)的取值,只能是當前可見區域(列表可滾動)的子項! 

即取值範圍在 >= ListView.getFirstVisiblePosition() &&  <= ListView.getLastVisiblePosition(); 
1)所以如果想獲取前部的將會出現返回Null值空指針問題; 
2)getChildCount跟getCount獲取的值將會不一樣(數量多時); 
3 )如果使用了getChildAt(index).findViewById(...)設置值的話,滾動列表時值就會改變了。 
   需要使用getFirstVisiblePosition()獲得第一個可見的位置,再用當前的position-它,再用getChildAt取值!即getChildAt(position - ListView。getFirstVisiblePosition()).findViewById(...)去設置值 
2.如果想更新某一行數據,需要配合ListView的滾動狀態使用,一般不滾動時才加載更新數據 

//全局變量,用來記錄ScrollView的滾動狀態,1表示開始滾動,2表示正在滾動,0表示停止滾動  
僞代碼 
ListView設置 
public int scrollStates; 
class OnScrollListenerImpl implements OnScrollListener{ 
@Override 
public void onScrollStateChanged(AbsListView view, int scrollState) { 
scrollStates = scrollState;  


@Override 
public void onScroll(AbsListView view, int firstVisibleItem, 
int visibleItemCount, int totalItemCount) { 
int lastInScreen = firstVisibleItem + visibleItemCount; 

listView.setOnScrollListener(new OnScrollListenerImpl()); 


Activity中 
if(scrollStates==OnScrollListener.SCROLL_STATE_IDLE){ 

更新視圖數據 

轉載自:

http://ahua186186.iteye.com/blog/1830180

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章