Java 使用NestedScrollView进行真正的慢速分页
在我的应用程序中,我在NestedScrollView中使用RecyclerView,并且用它实现分页。我在下面附上一段代码,用于实现带分页的嵌套滚动视图 我有一个大的没有数据附加到recyclerview,因此,这个数据需要大量的时间附加,这会影响列表的平滑滚动 我只有一个recylerview,它有简单的滚动问题,不平滑,但分页仍然可以正常工作。我将我的recyclerview插入nestedscrollview,滚动仅在第一页变得平滑。但是当调用分页时,滚动效果非常差 当页码增加时,滚动从坏到坏 让我展示一下用于嵌套视图滚动和分页的代码 home.xml:Java 使用NestedScrollView进行真正的慢速分页,java,android,Java,Android,在我的应用程序中,我在NestedScrollView中使用RecyclerView,并且用它实现分页。我在下面附上一段代码,用于实现带分页的嵌套滚动视图 我有一个大的没有数据附加到recyclerview,因此,这个数据需要大量的时间附加,这会影响列表的平滑滚动 我只有一个recylerview,它有简单的滚动问题,不平滑,但分页仍然可以正常工作。我将我的recyclerview插入nestedscrollview,滚动仅在第一页变得平滑。但是当调用分页时,滚动效果非常差 当页码增加时,滚动从
<android.support.v4.widget.NestedScrollView
android:id="@+id/nestedScroll"
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.v7.widget.RecyclerView
android:id="@+id/recycler_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scrollbars="none" />
</android.support.v4.widget.NestedScrollView>
我想实现平滑滚动,即使适配器在将数据绑定到视图保持架时需要时间。但是当在适配器内设置数据时,滚动会变得非常慢
或者如果我遗漏了什么,请纠正我
提前感谢。尝试在您的回收视图中设置:
rv.setNestedScrollingEnabled(false)代码>
在设置适配器之前。尝试在您的RecyclerView中设置:
rv.setNestedScrollingEnabled(false)代码>
设置适配器之前。如果不需要,请删除嵌套的滚动视图。并使用recyclerview实现分页首先,recyclerview很简单。我没有使用任何嵌套的scrollview,因此滚动没有那么好。但在实现嵌套滚动后,滚动是平滑的,但在将数据绑定到视图时会受到影响,因此需要时间。实际上,如果您在嵌套滚动视图中使用recycler视图,它将不会重复使用视图,也不会为您的计数创建视图。所以,当您更新项目的数据时,这将需要时间。可能是您的onBind()
方法正在执行长时间运行的过程。那么你能把它和你的问题一起添加吗?是的,onBindViewHolder()正在做一些繁重的任务。我甚至还尝试将“notifyDataSetChanged()”放在另一个线程中。但没有成功。如果不需要,请删除嵌套的滚动视图。并使用recyclerview实现分页首先,recyclerview很简单。我没有使用任何嵌套的scrollview,因此滚动没有那么好。但在实现嵌套滚动后,滚动是平滑的,但在将数据绑定到视图时会受到影响,因此需要时间。实际上,如果您在嵌套滚动视图中使用recycler视图,它将不会重复使用视图,也不会为您的计数创建视图。所以,当您更新项目的数据时,这将需要时间。可能是您的onBind()
方法正在执行长时间运行的过程。那么你能把它和你的问题一起添加吗?是的,onBindViewHolder()正在做一些繁重的任务。我甚至还尝试将“notifyDataSetChanged()”放在另一个线程中。但那没有成功,我已经做到了。除此之外,我还尝试了ViewCompat.setNestedScrollingEnabled(homeRecyclerView,false)代码>。但是没有成功,我已经成功了。除此之外,我还尝试了ViewCompat.setNestedScrollingEnabled(homeRecyclerView,false)代码>。但是没有任何成功。
@BindView(R.id.nestedScroll)
NestedScrollView nestedScroll;
private int currentPage = 0;
nestedScroll.getViewTreeObserver().addOnScrollChangedListener(new ViewTreeObserver.OnScrollChangedListener() {
@Override
public void onScrollChanged() {
View view = (View) nestedScroll.getChildAt(nestedScroll.getChildCount() - 1);
int diff = (view.getBottom() - (nestedScroll.getHeight() + nestedScroll.getScrollY()));
if (diff == 0) {
if (blnCheckREsult == false) {
blnCheckREsult = true;
if (ConnectivityReceiver.isConnected()) {
currentPage++;
getHomeData(currentPage);
} else {
Toast.makeText(activity, "Please check your internet connection", Toast.LENGTH_SHORT).show();
}
}
}
}
});