Методы findlastcompletelyvisibleitemposition () и findlastvisibleitemposition () recyclerview linearlayoutmanager

findLastCompletelyVisibleItemPosition: возвращает позицию адаптера последнего полностью видимого представления. Эта позиция не включает изменения адаптера, которые были отправлены после последнего прохода макета.

findLastVisibleItemPosition: возвращает позицию адаптера последнего видимого представления. Эта позиция не включает изменения адаптера, которые были отправлены после последнего прохода макета.

У меня 16 предметов. Таким образом, при прокрутке до конца (когда последний элемент полностью виден) оба метода дают результат 16. Но когда я прокручиваю до конца, но последний элемент виден наполовину, findLastCompletelyVisibleItemPosition показывает 14, а findLastVisibleItemPosition показывает 15.

Может кто-нибудь объяснить мне, почему отображается 14? и какова точная разница между этими двумя функциями.

@Override
    public void onScrolled(RecyclerView recyclerView, int dx, int dy) {

        RecyclerView.LayoutManager linearLayoutManager = recyclerView.getLayoutManager();

        if(linearLayoutManager != null && linearLayoutManager instanceof LinearLayoutManager) {
            int position = ((LinearLayoutManager) linearLayoutManager).findLastCompletelyVisibleItemPosition();
            int position1 = ((LinearLayoutManager) linearLayoutManager).findLastVisibleItemPosition();


            Log.d(TAG, "position: " + position);
            Log.d(TAG, "position1: " + position1);
        }
    }

а какой предмет вы можете видеть полностью?

pskink 10.09.2018 09:21
1
1
731
1

Ответы 1

Если у вас 16 элементов, невозможно вернуть 16 в качестве видимой позиции, поскольку ваша последняя позиция - 15-я.

Во-вторых, довольно просто понять, что делает каждый метод, исходя из их именования. Если последняя позиция - 15-я, и вы можете видеть ее половину, findLastCompletelyVisibleItemPosition вернет 14, а findLastVisibleItemPosition вернет 15.

Другие вопросы по теме