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-getFirstVisiblePosition(),再用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){
更新檢視資料
}
在很多時候ListView列表資料不需要全部重新整理,只需重新整理有資料變化的那一條,這時可以用getChildAt(index)獲取某個指定position的view,並對該view進行重新整理。
注意:在ListView中,使用getChildAt(index)的取值,只能是當前可見區域(列表可滾動)的子項!
即取值範圍在 >= ListView.getFirstVisiblePosition() && <= ListView.getLastVisiblePosition();
1)所以如果想獲取前部的將會出現返回Null值空指標問題;
2)getChildCount跟getCount獲取的值將會不一樣(數量多時);
3 )如果使用了getChildAt(index).findViewById(...)設定值的話,滾動列表時值就會改變了。
需要使用getFirstVisiblePosition()獲得第一個可見的位置,再用當前的position-getFirstVisiblePosition(),再用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){
更新檢視資料
}
相關文章
- 快取使用中的注意事項快取
- C中memcpy使用注意事項memcpy
- ThinkPHP中CURD where的使用注意事項PHP
- Linux中fork的使用注意事項Linux
- Oracle使用*的注意事項Oracle
- 使用parallel注意事項Parallel
- 2. Go中defer使用注意事項Go
- Android:ListView.addHeaderView()用法及其注意事項AndroidViewHeader
- 使用c++中string類的注意事項C++
- 使用Google Fonts注意事項Go
- Go 切片使用注意事項Go
- 使用CocosBuilder注意事項UI
- removeChild使用時注意事項REM
- 使用Vue.js的注意事項Vue.js
- 使用HTTP的三個注意事項HTTP
- 使用MyBatis的注意事項有哪些MyBatis
- 使用ProForm的useRef()物件的注意事項ORM物件
- JavaScript 中 this 的工作原理以及注意事項JavaScript
- JavaScript中this的工作原理以及注意事項JavaScript
- delphi中的bpl開發注意事項
- 網站設計中的注意事項網站
- Go 中修改切片副本的注意事項Go
- TCP使用注意事項總結TCP
- 萬兆網路卡使用注意事項
- MySQL半同步使用注意事項MySql
- Guava HashMultimap使用及注意事項Guava
- setbuf函式使用注意事項函式
- php getallheaders使用注意事項PHPHeader
- 使用直方圖注意事項直方圖
- ip代理軟體的使用注意事項
- 說點JSON使用的注意事項JSON
- cookie的使用方法以及注意事項Cookie
- 在 HttpHandler 中使用 Session 的注意事項HTTPSession
- golang 中 channel 的詳細使用、使用注意事項及死鎖分析Golang
- Xlistview的注意事項View
- ES6中箭頭函式使用的注意事項函式
- 開發及上線中的注意事項
- GO 中的 defer 有哪些注意事項?上Go