觉得这个功能挺实用的,记录下来,方便以后查看。
初始时,先将footerview添加到listview中,如下:
footView = LayoutInflater.from(this).inflate(R.layout.list_view_foot_loading_item, null);
footView.setVisibility(View.GONE);
mListView.addFooterView(footView);
实现动态加载,最主要的就是监听listview的滑动,具体实现如下:
</pre><p><pre name="code" class="java"> mListView.setOnScrollListener(new OnScrollListener()
{
@Override
public void onScrollStateChanged(AbsListView view, int scrollState)
{
if ((((lastItemIndex == messageAdapter.getCount() - 1) && mListView.getFooterViewsCount() == 0)
|| (((lastItemIndex == messageAdapter.getCount()) && mListView.getFooterViewsCount() != 0))) && scrollState == AbsListView.OnScrollListener.SCROLL_STATE_IDLE)
{
if (pageIndex * PAGE_SIZE >= totalCount)
{
showToast("没有更多结果了");
mListView.removeFooterView(footView);
return;
}
footView.setVisibility(View.VISIBLE);
messageLogic.querySystemMessages(pageIndex * PAGE_SIZE, PAGE_SIZE);
}
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount,
int totalItemCount)
{
lastItemIndex = firstVisibleItem + visibleItemCount - 1;
}
});
其中,lastItemIndex表示的是底部最后可见的item项的下标,从0开始;pageIndex表示的是当前的页数;PAGE_SIZE表示每页加载的数量;totalCount表示数据库中总共的数据数量,从服务器中获取。messageLogic.querySystemMessages(pageIndex * PAGE_SIZE, PAGE_SIZE)方法用于向服务器中请求相应的数据。当滑动到最后时,若数据库中还有数据,则显示加载的滚动条并加载数据,否则,删除footerview。