1

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

4

2 回答 2

0

在 Base Adapter 中,最初取 i=10;getCount()然后在方法中使用这个“i” BaseAdapter

public int getCount() {
// TODO Auto-generated method stub
return i;
}

并在您的“显示更多”中Button单击递增 i,然后调用适配器。

前任:

i=i+10;
adapter.notifyDataSetChanged();
于 2013-10-05T08:32:20.790 回答
0

由于您使用的是游标,因此您可以使用限制查询。您可以在哪里跟踪当前限制值。

比如说。你首先有 select * from table_name limit 0,10.. firstLimit = 0;,由于计数器 10 是固定的,在滚动时你可以确定最后一项是否可见并将其与光标计数进行比较,并将 firstLimit 增加 10 ,这样您的新查询将是 select * from table_name where limit (firstLimit+10), 10。由于这将返回一个新游标,您将不得不使用合并游标并将第一个游标和新游标合并,然后调用适配器上的 swapCursor 并传递合并的光标。

在这种情况下,对于游标维护,旧游标 = 合并游标。新游标将是带有新查询的游标。

然而,这将导致相同的情况,即用户可以在某个时间点看到所有项目。

为防止这种情况,您可以使用加载更多选项,并且一次只显示 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;
    }
});

当您滚动时,将显示新记录。

于 2013-10-05T07:08:05.223 回答