GetLastVisiblePosition возвращает -1
У меня проблема с моим 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
и по-прежнему иметь ту же проблему.
Ответы
Ответ 1
Это происходит потому, что в тот момент, когда вы вызываете getListView(). getLastVisiblePosition() listview не отображается. Вы можете добавить вызов в очередь сообщений вида следующим образом:
listview.post(new Runnable() {
public void run() {
listview.getLastVisiblePosition();
}
});
Ответ 2
Я предполагаю, что ваши методы getItem(int position)
и getItemId(int position)
не определены правильно в вашем адаптере.
Ответ 3
Даже я столкнулся с той же проблемой. Дело в том, что getLastVisiblePosition() работает только тогда, когда вы находитесь в первом элементе списка, а в остальном вы получите null, который будет возвращен. Так что я сделал это, я сделал небольшой расчет, чтобы узнать точную позицию зрения, о которой я упомянул ниже,
int LastPos=(mylist.getLastVisiblePosition()-mylist.getFirstVisiblePosition());
Это возвращает точную последнюю позицию без сомнений.