onScrolled автоматически вызывается для повторного просмотра с NestedScrollView - PullRequest
0 голосов
/ 11 марта 2019

У меня есть шаблон макета ниже: -

<CoordinatorLayout>
<AppBarLayout>
<CollapsingToolbarLayout>
<android.support.v4.widget.NestedScrollView
            android:id="@+id/nestedScroll"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:paddingBottom="@dimen/bottom_nav_margin"
            android:descendantFocusability="blocksDescendants"
            app:layout_behavior="@string/appbar_scrolling_view_behavior">
        <FrameLayout
                android:id="@+id/content"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:focusable="false"
                android:descendantFocusability="blocksDescendants"
        />
    </android.support.v4.widget.NestedScrollView>
</CollapsingToolbarLayout>
</AppBarLayout>
</CoordinatorLayout>

С FrameLayout у меня есть 2 фрагмента, в одном из которых есть RecyclerView.Recylerview имеет ленивый шаблон загрузки для загрузки данных, для этого я реализовал addOnScrollListener для загрузки следующего набора данных при прокрутке списка.Но благодаря nestedScrollView он автоматически вызывает прослушиватель onScroll и загружает все данные за один раз.

Я пробовал приведенные ниже решения, но ни одно из них не помогло мне: - решение 1 решение 2

Редактировать: - метод прослушивания onScroll: -

override fun onScrolled(recyclerView: RecyclerView, dx: Int, dy: Int) {
                super.onScrolled(recyclerView, dx, dy)
                val layoutManager = recyclerView.layoutManager as LinearLayoutManager
                    Sg.loge("Scrolled","called "+recyclerView.getAdapter()!!.getItemCount()+"**"+layoutManager.findLastVisibleItemPosition())

                if (layoutManager.findLastVisibleItemPosition() == recyclerView.getAdapter()!!.getItemCount() - 1
                    && recyclerView.getChildAt(recyclerView.getChildCount() - 1).getBottom() <= recyclerView.getHeight()) {

                    //scroll end reached
                    //Write your code here
                }
            }

Проблема заключается в layoutManager.findLastVisibleItemPosition () возвращает неправильное значение при использовании с nestedScrollView.
Возвращаемое значение findLastVisibleItemPosition с nestedScrollView равно 10 (но 5 из них видны только на экране).Возвращаемое значение findLastVisibleItemPosition без nestedScrollView равно 5 (что правильно)

...