最近使用SwipeRefreshLayout時經常遇見內部嵌套listView,但是listView往下拉的時候與SwipeRefreshLayout衝突,好像事件被攔截了,直接開始刷新了,記得以前解決過,但是忘記了,今天特意記下來。作爲一個菜鳥,用了最笨的辦法解決:
lvList.setOnScrollListener(new AbsListView.OnScrollListener() {
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
boolean enable = false;
if(lvList != null && lvList.getChildCount() > 0){
// 檢查第一個item是否可見
boolean firstItemVisible = lvList.getFirstVisiblePosition() == 0;
// 檢查第一個item是否完全顯示
boolean topOfFirstItemVisible = lvList.getChildAt(0).getTop() == 0;
// 如果第一個item可見並且完全顯示 則設置refreshLayout可用 否則不可用
enable = firstItemVisible && topOfFirstItemVisible;
}
refreshLayout.setEnabled(enable);
}
});
完美解決,應該還有其他解決方法,但是這個應該是最好理解的,對新手來說,暫時記住這個就可以了。