15

我的ListView(使用CursorAdapter)有问题。当我打电话getListView().getLastVisiblePosition()时,我正在接收-1。这是一个问题,因为我的列表中填充了项目。此外,getListView().getFirstVisiblePosition()无论我在列表中的哪个位置滚动,始终返回 0。有任何想法吗?

它与 startManagingCursor 有关

    @Override
    public void changeCursor(Cursor cursor) {
        super.changeCursor(cursor);
        MyActivity.this.mCursor = cursor;
        //startManagingCursor(MyActivity.this.mCursor);
    }

如果我注释掉 startManagingCursor,一切正常。我也尝试stopManagingCursor()在更改之前添加,但Cursor仍然有同样的问题。

4

3 回答 3

33

这是因为当您调用 getListView().getLastVisiblePosition() 时,不会呈现列表视图。您可以像这样将调用添加到视图的消息队列中:

listview.post(new Runnable() {
    public void run() {
        listview.getLastVisiblePosition();
    }
});
于 2011-07-28T03:15:06.647 回答
1

甚至我也面临同样的问题。问题是, getLastVisiblePosition() 仅在您位于列表视图的第一个元素中时才有效,其余部分您将返回 null。所以我所做的是,我做了一个小计算来找出我在下面提到的确切视图位置,

int  LastPos=(mylist.getLastVisiblePosition()-mylist.getFirstVisiblePosition());

毫无疑问,这将返回确切的最后位置。

于 2012-04-10T07:09:30.150 回答
0

我的猜测是您的getItem(int position)getItemId(int position)方法在您的适配器中没有正确定义。

于 2010-10-27T19:04:55.347 回答