在列表视图上显示有限的项目

时间:2013-10-05 06:45:16

标签: android android-listview

我有一个包含1000个数据的列表视图。我想一次只显示10个项目,当我的光标位于最后位置时,下一个滚动必须使我的光标在第一个位置导航,然后需要显示下10个项目。我的列表视图基于{{3}链接和我提到this,但不能实现我想要的。帮助我实现这一目标。提前谢谢。

2 个答案:

答案 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