2010-10-27 10 views
14

Ho un problema con il mio ListView (utilizzando CursorAdapte r). Quando chiamo getListView().getLastVisiblePosition() sto ricevendo -1. Questo è un problema poiché la mia lista è popolata di elementi. Inoltre, getListView().getFirstVisiblePosition() restituisce sempre 0, indipendentemente dalla posizione in cui si scorre nell'elenco. Qualche idea?getLastVisiblePosition restituisce -1

Ha qualcosa a che fare con startManagingCursor

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

Se io commento startManagingCursor, tutto funziona bene. Ho anche provato ad aggiungere stopManagingCursor() prima di cambiare il Cursor e ho ancora lo stesso problema.

+0

Qualcuno può offrire qualche idea in più? Id mi piace davvero usare startManagingCursor – Andrew

+0

La lista è già popolata quando chiami '.getLastVisiblePosition()'? –

risposta

0

La mia ipotesi è che i tuoi metodi getItem(int position) e getItemId(int position) non siano definiti correttamente nell'adattatore.

+0

Non sono definiti affatto. Non sono mai stati. Funzionava tutto bene fino a quando non ho iniziato a utilizzare startManagingCursor (perché stavo ricevendo errori di "Finalizzazione di un cursore che non è stato disattivato o chiuso"). Inoltre, non vedo come questi due metodi potrebbero influenzare questo. Chiedo ad Android la prima e l'ultima posizione visibile; non per i dati. – Andrew

+0

Sì, e sono sicuro che getLastPosition() usa questi 2 metodi per determinare quell'informazione – Falmarri

+0

Perché dovrebbe? Inoltre, dal momento che non sto sovrascrivendo questi metodi, perché tutto andrebbe bene quando non avviiManagingCursor, ma non riesco a farlo una volta fatto? In entrambi i casi, non ho annullato questi metodi – Andrew

32

Questo perché dal momento in cui si chiama getListView(). GetLastVisiblePosition() la listview non viene visualizzata. È possibile aggiungere la chiamata alla coda di messaggi della visualizzazione in questo modo:

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

Man, grazie mille per questo. – Yar

+0

Questo ha senso .. Grazie luciferleo. –

+0

Questa dovrebbe essere la risposta accettata! – Virthuss

0

Anche io ho affrontato lo stesso problema. Il fatto è che, getLastVisiblePosition() funziona solo quando ci si trova nel primo elemento della listview e per il resto si otterrà il reso nullo. Quindi quello che ho fatto è che, ho fatto un piccolo calcolo per scoprire la posizione esatta visione che ho citato qui di seguito,

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

Questo restituisce l'ultimo esatta posizione senza dubbio.

Problemi correlati