pull_to_refresh debug

好久沒有寫博客了。主要是工作太忙了 + 自己開始變懶了。懺悔一下


今天研究了一下PullToRefresh[https://github.com/chrisbanes/Android-PullToRefresh]的機制,就是下拉然後自動刷新的功能,其實還是不太懂。不過先把自己已經搞清楚的寫一下

1. PullToRefreshListView(PullToRefreshBase).onTouchEvent(MotionEvent) line: 330

MotionEvent.ACTION_MOVE ==> pullEvent()
2. PullToRefreshListView(PullToRefreshBase).pullEvent() line: 1193
3. PullToRefreshListView(PullToRefreshBase).setHeaderScroll(int) line: 957
4. RotateLoadingLayout(LoadingLayout).onPull(float) line: 228
5. RotateLoadingLayout.onPullImpl(float) line: 67
2-5用來顯示“放開以刷新”的header,當onTouchEvent檢測到MotionEvent.ACTION_UP的時候,再顯示
“正在刷新”header


當檢測到 MotionEvent.ACTION_DOWN之後:
1. PullToRefreshListView(PullToRefreshBase).onTouchEvent(MotionEvent)
判斷此時的motion (down、up、move)進行任務分發。此時實際是在父類(PullToRefreshBase)中
2. PullToRefreshListView(PullToRefreshBase).setState(PullToRefreshBase$State, boolean...) 
從onTouchEvent獲得狀態,進一步分發任務:
3. PullToRefreshListView.onRefreshing(boolean) line: 77
通過super.onRefreshing, 逐步調用真正的刷新
4. PullToRefreshListView(PullToRefreshBase).onRefreshing(boolean) line: 761
判斷是否需要scroll,然後用不同方式調用callRefreshListener()
5. PullToRefreshListView(PullToRefreshBase).callRefreshListener() line: 1063
2種調用方式:
a. 先調用mOnRefreshListener.onRefresh(this);
b. 如果mOnRefreshListener2非null,根據mCurrentMode == Mode.PULL_FROM_START/END調用mOnRefreshListener2.onPullUp(/down)ToRefresh(this);

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