一个伟大的人写的伟大的控件被一群现在不伟大以后也基本不会伟大但向往伟大的人深爱着!
唯一的小bug是在XML里不能写隐藏,否则的话在代码里让它显示是不会起作用的,pullToRefresh里包含很多控件,但使用最多的就是listview和狗日的view(gridview),使用方法基本一样,会一个也基本就都会了。
一、从网上找个依赖文件,网上有很多,他只能是依赖文件,不能是jar包
二、XML布局,除了名字不同,其他的和普通的listview一样
<com.handmark.pulltorefresh.library.PullToRefreshListView
android:id="@+id/corps_listview"
style="@style/w_match_h_match"
android:layout_margin="@dimen/dp_15"
android:layout_weight="1"
android:divider="@color/bg_Black_Light_L_L_L"
android:dividerHeight="1.5dp"
android:horizontalSpacing="10dp"
android:scrollbars="none"
android:verticalSpacing="5dp" >
</com.handmark.pulltorefresh.library.PullToRefreshListView>
三、配置
PullToRefreshListView pullToRefreshListView= (PullToRefreshListView) findViewById(R.id.list_view);
mListView.setMode(Mode.BOTH);
设置模式 mode;
Mode.BOTH:同时支持上拉下拉
Mode.PULL_FROM_START:只支持下拉Pulling Down
Mode.PULL_FROM_END:只支持上拉Pulling Up
注意;BOTH时,设置的Listener 得是OnRefreshListener2,其他的模式时OnRefreshListener就可以,别问为什么。。
//下拉刷新
pullToRefreshListView.setMode(Mode.BOTH);//设置模式、现在是可以上拉也可以下拉
pullToRefreshListView.getLoadingLayoutProxy(true, false).setLastUpdatedLabel("下拉刷新");//数据刷新前
pullToRefreshListView.getLoadingLayoutProxy(true, false).setPullLabel("");//数据刷新图标
pullToRefreshListView.getLoadingLayoutProxy(true, false).setRefreshingLabel("正在刷新");//数据刷新中
pullToRefreshListView.getLoadingLayoutProxy(true, false).setReleaseLabel("放开以刷新");//数据刷新后
// 上拉加载更多时的提示文本设置
pullToRefreshListView.getLoadingLayoutProxy(false, true).setLastUpdatedLabel("上拉加载");
pullToRefreshListView.getLoadingLayoutProxy(false, true).setPullLabel("");
pullToRefreshListView.getLoadingLayoutProxy(false, true).setRefreshingLabel("正在加载...");
pullToRefreshListView.getLoadingLayoutProxy(false, true).setReleaseLabel("放开以加载");
getLoadingLayoutProxy里的两个参数是选择上拉还是下拉的
/**
* 设置下拉刷新和上拉加载时的 铃声(可有可无)
*/
SoundPullEventListener<ListView> soundListener = new SoundPullEventListener<ListView>(this);
soundListener.addSoundEvent(State.PULL_TO_REFRESH, R.raw.pull_event);
soundListener.addSoundEvent(State.RESET, R.raw.reset_sound);
soundListener.addSoundEvent(State.REFRESHING, R.raw.refreshing_sound);
mPullRefreshListView.setOnPullEventListener(soundListener);
addSoundEvent里的参数是设置在某个状态时候的声音
四、使用
pullToRefreshListView.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2() {
// 下拉刷新
@Override
public void onPullDownToRefresh(
PullToRefreshBase refreshView) {
// PullUpToRefresh(0);
if (!UtilsNetWork.isConnected(getActivity())) {
showToast("请检查网络");
}
Recommend();//这个是加载数据的方法
new FinishRefresh().execute();//这个是告诉控件,让丫刷新
}
// 上拉加载
@Override
public void onPullUpToRefresh(PullToRefreshBase refreshView) {
if (!UtilsNetWork.isConnected(getActivity())) {
showToast("请检查网络");
}
PullUpToRefresh(1);//这个是加载数据的方法
new FinishRefresh().execute();//这个是告诉控件,让丫刷新
}
});
//这个方法基本上是固定的
private class FinishRefresh extends AsyncTask<Void, Void, Void> {
//这个方法是控制上拉火下拉的时候那些字啊图标什么的显示的时间,不设也可以
@Override
protected Void doInBackground(Void... params) {
try {
Thread.sleep(500);
} catch (InterruptedException e) {
}
return null;
}
//通知控件数据刷新
@Override
protected void onPostExecute(Void aVoid) {
pullToRefreshListView.onRefreshComplete();//告诉控件数据提交
ad.notifyDataSetChanged();//适配器刷新,可以在获取更新数据的时候写,这里就只需要上门的那个方法了
}
}