您的位置:首页 > 其它

PullToRefresh实现下拉刷新和上拉加载

2015-05-08 22:24 330 查看
一、导入Library

下载源码后(https://github.com/chrisbanes/Android-PullToRefresh),里面有个Library工程,添加工程到Eclipse中;



二、导入项目

1.新建工程后,右键->Properties->Android->Add 选择上面的Library



2.main_activity.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:background="#ffffff">

<!-- The PullToRefreshListView replaces a standard ListView widget. -->
<com.handmark.pulltorefresh.library.PullToRefreshListView
android:id="@+id/pull_refresh_list"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:cacheColorHint="#00000000"
android:divider="#19000000"
android:dividerHeight="4dp"
android:fadingEdge="none"
android:fastScrollEnabled="false"
android:footerDividersEnabled="false"
android:headerDividersEnabled="false"
android:smoothScrollbar="true" />

</LinearLayout>


com.handmark.pulltorefresh.library.PullToRefreshListView 相当于ListView控件,用这段来代替原是ListView控件的代码

package com.example.fresh;

import java.util.Arrays;
import java.util.LinkedList;

import com.handmark.pulltorefresh.library.PullToRefreshBase;
import com.handmark.pulltorefresh.library.PullToRefreshBase.Mode;
import com.handmark.pulltorefresh.library.PullToRefreshListView;
import com.handmark.pulltorefresh.library.PullToRefreshBase.OnRefreshListener;

import android.os.AsyncTask;
import android.os.Bundle;
import android.app.Activity;
import android.text.format.DateUtils;
import android.widget.ListView;

public class MainActivity extends Activity {
private String[] mStrings = {"a","b","c","b","c","b","c","b","c","b","c","b","c","b","c","b","c","b","c","b","c"};

private PullToRefreshListView mPullRefreshListView;
private myPayedAdapter my_pay_adapter;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

mPullRefreshListView = (PullToRefreshListView) findViewById(R.id.pull_refresh_list);
mPullRefreshListView.setMode(Mode.BOTH);

mPullRefreshListView.getLoadingLayoutProxy(false, true).setPullLabel(
"上拉加载更多...");
mPullRefreshListView.getLoadingLayoutProxy(false, true)
.setRefreshingLabel("加载中...");
mPullRefreshListView.getLoadingLayoutProxy(false, true)
.setReleaseLabel("松开加载更多...");

// Set a listener to be invoked when the list should be refreshed.
mPullRefreshListView
.setOnRefreshListener(new OnRefreshListener<ListView>() {
@Override
public void onRefresh(
PullToRefreshBase<ListView> refreshView) {

if (mPullRefreshListView.isHeaderShown()) {
// Do work to refresh the list here.
new GetDataTask1().execute();
} else if (mPullRefreshListView.isFooterShown()) {
// Do work to refresh the list here.
new GetDataTask2().execute();
}

}
});

my_pay_adapter = new myPayedAdapter(this, mStrings);
mPullRefreshListView.setAdapter(my_pay_adapter);

}

private class GetDataTask1 extends AsyncTask<Void, Void, String> {
// 后台处理部分
@Override
protected String doInBackground(Void... params) {
// Simulates a background job.
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
}
String str = "Added after refresh...I add";
return str;
}

// 这里是对刷新的响应,可以利用addFirst()和addLast()函数将新加的内容加到LISTView中
// 根据AsyncTask的原理,onPostExecute里的result的值就是doInBackground()的返回值
@Override
protected void onPostExecute(String result) {
mStrings[0] = "aaaa";
// 通知程序数据集已经改变,如果不做通知,那么将不会刷新mListItems的集合
my_pay_adapter.notifyDataSetChanged();
// Call onRefreshComplete when the list has been refreshed.
mPullRefreshListView.onRefreshComplete();

super.onPostExecute(result);// 这句是必有的,AsyncTask规定的格式
}
}
private class GetDataTask2 extends AsyncTask<Void, Void, String> {
// 后台处理部分
@Override
protected String doInBackground(Void... params) {
// Simulates a background job.
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
}
String str = "Added after refresh...I add";
return str;
}

// 这里是对刷新的响应,可以利用addFirst()和addLast()函数将新加的内容加到LISTView中
// 根据AsyncTask的原理,onPostExecute里的result的值就是doInBackground()的返回值
@Override
protected void onPostExecute(String result) {
mStrings[0] = "bbbbb";
// 通知程序数据集已经改变,如果不做通知,那么将不会刷新mListItems的集合
my_pay_adapter.notifyDataSetChanged();
// Call onRefreshComplete when the list has been refreshed.
mPullRefreshListView.onRefreshComplete();

super.onPostExecute(result);// 这句是必有的,AsyncTask规定的格式
}
}
}


另外:

1、设置向上拉刷新还是向下拉刷新的代码:

mPullRefreshListView.setMode(Mode.PULL_FROM_END);//向下拉刷新

mPullRefreshListView.setMode(Mode.PULL_FROM_START);//向上拉刷新

mPullRefreshListView.setMode(Mode.BOTH);//两端刷新

2.上拉加载设置文字,这三行就是改变下边部分的文字

mExpandList.setMode(Mode.BOTH);
mExpandList.getLoadingLayoutProxy(false, true).setPullLabel(getString(R.string.pull_to_load));
mExpandList.getLoadingLayoutProxy(false, true).setRefreshingLabel(getString(R.string.loading));
mExpandList.getLoadingLayoutProxy(false, true).setReleaseLabel(getString(R.string.release_to_load));


3.实现上拉的事件监听,只需要实现OnRefreshListener2就可以了,同时setMode(Mode.BOTH)

参考链接/article/2593980.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: