这个 刷新的组件Android-PullToRefresh 还是很好用的,这里只测试学习了ListView的上拉刷新和下拉加载。根据文档的介绍它可以Wrraper工作ListView、GridView、WebView、ViewPager、ScrollView等等。ListView是非常常见的,所以记录学习。
参考的资料如下,这些资料足以知道如何使用了。
2. 博文参考
pulltorefresh(二)的自定义属性介绍、attrs文件介绍
3. 正如作者所说,它是一个Wrapper,所以使用的方法和ListView并没有什么不一样。在layout中定义一个布局:
<span style="font-size:18px;"> <com.handmark.pulltorefresh.library.PullToRefreshListView
android:id="@+id/listview"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
ptr:ptrMode="both"
ptr:ptrAnimationStyle="rotate"
ptr:ptrRefreshableViewBackground="@android:color/holo_blue_bright"
ptr:ptrHeaderBackground="@android:color/holo_orange_light"
ptr:ptrHeaderTextColor="@android:color/holo_red_light" /></span>
其中属性的说明,可以参考文档地址或者上面的链接。
然后在Activity中,对它处理:
<span style="font-size:18px;">
mPullToRefreshListView = (PullToRefreshListView) findViewById(R.id.listview);
mAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, mStringArray);
mPullToRefreshListView.setAdapter(mAdapter);
mPullToRefreshListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
Log.e(TAG, "position-->" + position);
String item = (String) mAdapter.getItem(position-1);
Toast.makeText(getApplicationContext(), item, Toast.LENGTH_SHORT).show();
}
});</span>
代码中设置上拉或者下拉的提示文字:
<span style="font-size:18px;"> //设置指示的文字
ILoadingLayout startLabels = mPullToRefreshListView.getLoadingLayoutProxy(true, false);
startLabels.setPullLabel("下拉刷新");
startLabels.setRefreshingLabel("正在刷新");
startLabels.setReleaseLabel("释放刷新");
ILoadingLayout endLabels = mPullToRefreshListView.getLoadingLayoutProxy(false, true);
endLabels.setPullLabel("加载更多");
endLabels.setRefreshingLabel("正在加载");
endLabels.setReleaseLabel("释放加载");</span>
设置刷新监听:
<span style="font-size:18px;"> mPullToRefreshListView.setOnRefreshListener(new OnRefreshListener2<ListView>() {
@Override
public void onPullDownToRefresh(
PullToRefreshBase<ListView> refreshView) {
Log.e(TAG, "上拉刷新");
//mPullToRefreshListView.setMode(PullToRefreshBase.Mode.BOTH);
new MyDataTaskUp().execute();
}
@Override
public void onPullUpToRefresh(
PullToRefreshBase<ListView> refreshView) {
Log.e(TAG, "下拉更多");
new MyDataTaskDown().execute();
}
});</span>
如果有需要,可以设置Pull事件监听:
<span style="font-size:18px;"> mPullToRefreshListView.setOnPullEventListener(new OnPullEventListener<ListView>() {
@Override
public void onPullEvent(PullToRefreshBase<ListView> refreshView,
State state, Mode direction) {
if (state == PullToRefreshBase.State.PULL_TO_REFRESH ) {
Log.e(TAG, "PULL_TO_REFRESH");
} else if (state == PullToRefreshBase.State.REFRESHING ) {
Log.e(TAG, "REFRESHING");
} if (state == PullToRefreshBase.State.RELEASE_TO_REFRESH ) {
Log.e(TAG, "RELEASE_TO_REFRESH");
}
}
});</span>
其中,有以下需要记录的是:
①当使用 setRefreshing()来手动刷新时,它根据最近一次的刷新方式来决定是进行上拉还是下拉,所以在点击手动刷新时,先设置组件的的模式,让它只允许下拉刷新,然后在刷新监听中恢复为允许两种模式。
<span style="font-size:18px;"> //按钮监听
public void onBtnRefresh(View view) {
mPullToRefreshListView.setMode(PullToRefreshBase.Mode.PULL_FROM_START);
mPullToRefreshListView.setRefreshing();
}</span>
②资源下载