У меня есть шаблон макета ниже: -
<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 (что правильно)