此範例需要配合以下的 Library, 由於原作者已經不在維護. 這邊我 Fork 出來修改部份成我需要的.
ActionBar-PullToRefresh
以下是 xml, 要可以使用 ActionBar-PullToRefresh, 必須使用 uk.co.senab.actionbarpulltorefresh.library.PullToRefreshLayout 當作 root view
<uk.co.senab.actionbarpulltorefresh.library.PullToRefreshLayout xmlns:android="http://schemas.android.com/apk/res/android"<br/> android:id="@+id/ptr_layout"<br/> android:layout_width="match_parent"<br/> android:layout_height="match_parent"><br/><br/> <RelativeLayout<br/> android:layout_width="match_parent"<br/> android:layout_height="match_parent"<br/> android:background="@android:color/black"<br/> android:layout_margin="16dp"><br/><br/> <TextView<br/> android:layout_width="wrap_content"<br/> android:layout_height="wrap_content"<br/> android:text="12312312312"<br/> android:textColor="@android:color/white"<br/> android:layout_alignParentTop="true"/><br/><br/><br/> </RelativeLayout><br/><br/></uk.co.senab.actionbarpulltorefresh.library.PullToRefreshLayout>
ActionBar-PullToRefresh 預設支援以下三種
* AbsListView derivatives (ListView & GridView).
* ScrollView
* WebView
但這邊我們採用 RelativeLayout. 因此需要特別設定.
這邊請 class 名稱.
這邊 isReadyForPull 如果回 true 則此 Layout 可以做 pull to refresh.
因此如果有 customize view, 可以用這種方式來自定下拉重新整理的行為.
private class MyListViewDelegate extends AbsListViewDelegate {<br/><br/> @Override<br/> public boolean isReadyForPull(View view, float v, float v2) {<br/> return true;<br/> }<br/> }
搭配上面的 delegte 則 PullToRefreshLayout 必須額外設定.
ActionBarPullToRefresh.from(this)<br/> .allChildrenArePullable()<br/> .options(Options.create()<br/> .scrollDistance(.45f)<br/> .build())<br/> .useViewDelegate(ViewGroup.class, new MyListViewDelegate())<br/> .listener(this)<br/> .setup(mPtrLayout);
如此一來就可以達成我們的目的了.
附圖是結果.
很早之前提到使用 Google support-v4 套件的 SwipeRefreshLayout
也許是習慣了, 我個人認為使用 ActionBar-PullToRefresh 更方便設定以及使用.
原始碼下載:
ActionbarPullToRefresh.zip
沒有留言:
張貼留言