为了能更直接的对应主题,下面代码不完整,所以请不要直接复制粘贴到IDE中,重点代码加粗显示,代码中有注释.
public class MyActivity extends Activity implements OnScrollListener {
// 参数
/** 数据源 */
private List<Joke> data;
/** 初始显示的页数 */
private int pageNum = 1;
/** 每一次显示多少个 */
private static final int pageCount = 20;
/** MyAdapter引用 */
private MyAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 隐藏标题
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.listing);
}
/**
* 自定义ListView的Adapter类
*
* @author Lion
*
*/
class MyAdapter extends BaseAdapter {
// 数据源
private List<Joke> data;
public MyAdapter(List<Joke> data) {
super();
this.data = data;
}
@Override
public int getCount() {
// 返回该显示的数据个数
// pageCount 一页显示多少个
// pageNum 第几页
return pageCount * pageNum;
}
@Override
public Object getItem(int position) {
return data != null ? data.get(position) : null;
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
return convertView;
}
}
/**
* OnScrollListener接口实现方法
*/
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
// 当不滚动时
if (scrollState == SCROLL_STATE_IDLE) {
// 判断到底部滚动
if (view.getLastVisiblePosition() == (view.getCount() - 1)) {
if (data.size() - pageNum * pageCount <= pageCount) {
// 这种情况就是末尾了,也就是集合(数据源)里面没有数据了
Toast.makeText(getApplicationContext(), "已至末尾...",
Toast.LENGTH_SHORT).show();
} else {
// 显示页数+1
pageNum++;
// 刷新ListView
adapter.notifyDataSetChanged();
}
}
}
}
/**
* OnScrollListener接口实现方法
*/
@Override
public void onScroll(AbsListView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount) {
}
}