getLastVisiblePosition, возвращающий -1 - PullRequest
14 голосов
/ 27 октября 2010

У меня проблема с моим 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, но у меня все еще остается та же проблема.

Ответы [ 3 ]

33 голосов
/ 28 июля 2011

Это потому, что в момент вызова getListView (). GetLastVisiblePosition () просмотр списка не отображается. Вы можете добавить вызов в очередь сообщений представления следующим образом:

listview.post(new Runnable() {
    public void run() {
        listview.getLastVisiblePosition();
    }
});
1 голос
/ 10 апреля 2012

Даже я столкнулся с той же проблемой.Дело в том, что getLastVisiblePosition () работает только тогда, когда вы находитесь в первом элементе вашего списка, а в остальном вы получите нулевое значение.Итак, я сделал небольшое вычисление, чтобы выяснить точную позицию обзора, о которой я упоминал ниже:

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

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

0 голосов
/ 27 октября 2010

Я предполагаю, что ваши методы getItem(int position) и getItemId(int position) не определены правильно в вашем адаптере.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...