2010-10-27 83 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()); 

這將返回毫無疑問的確切最後一個位置。