我有一个包含1000个数据的列表视图。我想一次只显示10个项目,当我的光标位于最后位置时,下一个滚动必须使我的光标在第一个位置导航,然后需要显示下10个项目。我的列表视图基于{{3}链接和我提到this,但不能实现我想要的。帮助我实现这一目标。提前谢谢。
答案 0 :(得分:0)
由于您使用的是游标,因此您可以使用限制查询。你可以在哪里跟踪当前的限制值。
比如说。你首先从table_name limit 0,10 .. firstLimit = 0;中选择*,并且由于计数器10是固定的,在滚动时你可以确定最后一项是否可见并将其与光标计数进行比较,并将firstLimit增加10 ,这样你的新查询将从table_name中选择* limit(firstLimit + 10),10。因为这将返回一个新的游标,你将不得不使用合并游标并合并第一个游标和新游标,并调用适配器上的swapCursor并传递合并的游标。
在这种情况下,对于游标维护,旧游标= mergedCursor。并且新光标将是具有新查询的光标。
然而,这将导致相同的情况,即用户可以看到一个时间点的所有项目。为了防止这种情况,您可以使用更多加载选项,一次只显示10条记录...始终。
---->编辑:这是一个例子
假设您已启动并运行必要的数据库相关文件。以及带有自定义游标适配器的列表视图,执行以下操作:
lstView.setOnScrollListener(new OnScrollListener() {
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {}
@Override
public void onScroll(AbsListView view, int firstVisibleItem,int visibleItemCount, int totalItemCount) {
if (firstVisibleItem+visibleItemCount == totalItemCount && totalItemCount!=0) {
start = end; end += 10;
cursorLoadMore = dbOperations.getData(YourActivity.this,start,end);
}
cursors = new Cursor[] {cursorLoadMore, cursor};
MergeCursor mergeCursor = new MergeCursor(cursors);
myListAdapter.swapCursor(mergeCursor);
myListAdapter.notifyDataSetChanged();
cursor = mergeCursor;
}
});
滚动时,将显示新记录。
答案 1 :(得分:0)
在Base Adapter中,最初取i = 10;然后在getCount()
的{{1}}方法中使用此“i”。
BaseAdapter
在“显示更多”中public int getCount() {
// TODO Auto-generated method stub
return i;
}
点击增加i,然后调用适配器。
例如:
Button