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());

Это возвращает точную последнюю позицию без сомнений.