getLastVisiblePosition返回-1

时间:2010-10-27 19:00:21

标签: android listview cursor

我的ListView(使用CursorAdapte r)出了问题。当我致电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,但问题仍然存在。

3 个答案:

答案 0 :(得分:33)

这是因为你调用getListView()。getLastVisiblePosition()的那一刻不会呈现listview。您可以将调用添加到视图的消息队列中,如下所示:

listview.post(new Runnable() {
    public void run() {
        listview.getLastVisiblePosition();
    }
});

答案 1 :(得分:1)

即使我遇到同样的问题。问题是,只有当你在listview的第一个元素中时,getLastVisiblePosition()才有效,其余的你将返回null。所以我做的是,我做了一个小计算,找出我在下面提到的确切视图位置,

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

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

答案 2 :(得分:0)

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