介绍一个android下拉刷新、上拉加载的库:
https://github.com/chrisbanes/Android-PullToRefresh
使用方式,创建好一个Android项目,导入library库即可:
布局文件:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >
<com.handmark.pulltorefresh.library.PullToRefreshListView
android:id="@+id/pull_refresh_list"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
</com.handmark.pulltorefresh.library.PullToRefreshListView>
</RelativeLayout>
主要Activity:
package com.example.pulltofresh;
import java.util.Arrays;
import java.util.LinkedList;
import android.app.Activity;
import android.content.Context;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.Menu;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;
import com.handmark.pulltorefresh.library.PullToRefreshBase;
import com.handmark.pulltorefresh.library.PullToRefreshBase.Mode;
import com.handmark.pulltorefresh.library.PullToRefreshBase.OnRefreshListener;
import com.handmark.pulltorefresh.library.PullToRefreshListView;
public class MainActivity extends Activity {
private PullToRefreshListView mPullToRefreshListView;
private LinkedList<String> mItemList;
private ArrayAdapter<String> adapter;
private int first = 0;
private int end = 0;
private Context context;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
context = this;
initData();
adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, mItemList);
//初始化控件
mPullToRefreshListView = (PullToRefreshListView)findViewById(R.id.pull_refresh_list);
ListView mListView = mPullToRefreshListView.getRefreshableView();
mListView.setAdapter(adapter);
mPullToRefreshListView.setMode(Mode.BOTH);
mPullToRefreshListView.setOnRefreshListener(new OnRefreshListener<ListView>(){
@Override
public void onRefresh(PullToRefreshBase<ListView> refreshView) {
new GetDataTask(refreshView,adapter).execute();
}
});
}
private class GetDataTask extends AsyncTask<Void, Void, String[]> {
private PullToRefreshBase<ListView> refreshView;
private ArrayAdapter<String> adapter;
public GetDataTask(PullToRefreshBase<ListView> refreshView,ArrayAdapter<String> adapter) {
this.refreshView = refreshView;
this.adapter = adapter;
}
@Override
protected String[] doInBackground(Void... params) {
// Simulates a background job.
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
}
return data;
}
@Override
protected void onPostExecute(String[] result) {
if (refreshView.isHeaderShown()){
Toast.makeText(context, "下拉刷新",Toast.LENGTH_SHORT).show();
mItemList.addFirst("first" + first);
first++;
}else{
Toast.makeText(context, "上拉加载更多",Toast.LENGTH_SHORT).show();
mItemList.addLast("end" + end);
end++;
}
adapter.notifyDataSetChanged();
mPullToRefreshListView.onRefreshComplete();
super.onPostExecute(result);
}
}
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
private void initData(){
//初始化数据
mItemList = new LinkedList<String>();
mItemList.addAll(Arrays.asList(data));
}
private String[] data = new String[]{"data1","data2","data3","data4","data5","data6",
"data1","data2","data3","data4","data5","data6"};
protected String[] doInBackground(Void... params) {
// TODO Auto-generated method stub
return null;
}
}
运行结果: