2010-10-27 113 views
14

我有我的ListView(使用CursorAdapte R)的问题。当我拨打getListView().getLastVisiblePosition()时,我正在收到-1。这是一个问题,因为我的列表中填充了项目。另外,无论我在列表中滚动的位置,getListView().getFirstVisiblePosition()总是返回0。有任何想法吗?getLastVisiblePosition返回-1

它是与startManagingCursor

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

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

+0

任何人都可以提供任何额外的想法?我真的很喜欢使用startManagingCursor – Andrew 2010-10-28 21:44:00

+0

当你调用'.getLastVisiblePosition()'时,listview已经被填充了吗? – 2011-07-28 03:19:35

回答

0

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

+0

他们没有定义。他们从来没有。直到我开始使用startManagingCursor之前,这一切都工作正常(因为我收到“正在完成未关闭或关闭的光标”错误)。我也看不出这两种方法会如何影响这一点。我要求Android提供第一个也是最后一个可见的位置;而不是数据。 – Andrew 2010-10-27 19:12:16

+0

是的,我确信getLastPosition()使用这两种方法来确定信息 – Falmarri 2010-10-27 19:31:24

+0

为什么会这样?此外,由于我不覆盖这些方法,为什么一切都工作正常,当我不startManagingCursor,但一旦我失败了?在这两种情况下,我都没有超过这些方法 – Andrew 2010-10-27 19:43:09

32

这是因为当你调用getListView()。getLastVisiblePosition()时,listview不会被渲染。您可以像这样将呼叫添加到视图的消息队列中:

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

男人,非常感谢。 – Yar 2012-06-29 11:30:29

+0

这确实有道理..谢谢luciferleo。 – 2015-04-15 12:50:52

+0

这应该是被接受的答案! – Virthuss 2015-10-12 03:45:18

0

即使我面临同样的问题。问题是,getLastVisiblePosition()只在你处于你的列表视图的第一个元素中时才起作用,其余的你将返回null。因此,我所做的是,我做了一个小的计算,以找出我在下面所提到的具体观点立场,

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

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