直接上代码。
其实主要就是通过继承OnScrollListener 这个接口在 onScrollStateChanged 这个方法里面 判断listview是否到最后1条。
然后加载数据,下面部分代码。
public class MainActivity extends Activity implements OnScrollListener {
private ArrayAdapteradapter;
private ListView listView;
private TextView loadText;
private ProgressBar pg;
private List list;
// ListView底部View
private View moreView;
private Handler handler = new Handler();
private int MaxNum = 22;// 设置一个最大的数据条数,超过即不再加载
// 最后可见条目的索引
private int lastVisibleIndex;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listView = (ListView) findViewById(R.id.ll);
moreView = getLayoutInflater().inflate(R.layout.moredata, null);
loadText = (TextView) moreView.findViewById(R.id.bt_load);
pg = (ProgressBar) moreView.findViewById(R.id.pg);
listView.addFooterView(moreView);
// 用map来装载数据,初始化10条数据
list = new ArrayList();
// 实例化SimpleAdapter
adapter=new ArrayAdapter(this, R.layout.item,R.id.tv_title, list);
listView.setAdapter(adapter);
listView.setOnScrollListener(this);
loadDate();
/**手动加载**/
//loadText.setOnClickListener(new OnClickListener() {
//@Override
//public void onClick(View v) {
//pg.setVisibility(View.VISIBLE);// 将进度条可见
//loadText.setVisibility(View.GONE);// 按钮不可见
//handler.postDelayed(new Runnable() {
//@Override
//public void run() {
//loadDate();
//loadText.setVisibility(View.VISIBLE);
//pg.setVisibility(View.GONE);
//adapter.notifyDataSetChanged();// 通知listView刷新数据
//}
//}, 2000);
//}
//});
}
/** 说明一下
* onScroll是滑动后触发的
* onScrollStateChanged是拖着滑动触发
* */
@Override
public void onScroll(AbsListView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount) {
// 计算最后可见条目的索引
lastVisibleIndex = firstVisibleItem + visibleItemCount - 1;
// 所有的条目已经和最大条数相等,则移除底部的View
if (totalItemCount == MaxNum + 1) {
listView.removeFooterView(moreView);
Toast.makeText(this, "数据全部加载完成", Toast.LENGTH_LONG).show();
}
}
//滑动的时候判断是否已经到了底部。
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
//OnScrollListener.SCROLL_STATE_TOUCH_SCROLL
//OnScrollListener.SCROLL_STATE_FLING
//OnScrollListener.SCROLL_STATE_IDLE
if (scrollState == OnScrollListener.SCROLL_STATE_IDLE
&& lastVisibleIndex == adapter.getCount()) {
// 当滑到底部时自动加载
pg.setVisibility(View.VISIBLE);
loadText.setVisibility(View.GONE);
handler.postDelayed(new Runnable() {
@Override
public void run() {
loadDate();
loadText.setVisibility(View.VISIBLE);
pg.setVisibility(View.GONE);
adapter.notifyDataSetChanged();
}
}, 2000);
}
}
//这里加载数据
private void loadDate(){
int count = adapter.getCount();
//if (count + 5
几个工程:
1. 上面那个简单的 上拉加载更多的例子
http://download.csdn.net/detail/kongbaidepao/6884945
2. 网上的一个 上拉加载更多下拉刷新的例子
http://download.csdn.net/detail/kongbaidepao/6884933
3. 还有1个挺完善的listview scrollviewgridview 加载更多的例子
http://download.csdn.net/detail/kongbaidepao/6884999
另外附一个开源项目,有兴趣的可以去看看呢。
https://github.com/chrisbanes/Android-PullToRefresh