Android 如何使用NestedScrollView进行分页?
当我使用嵌套滚动视图进行分页时,会花费太多时间,有时我的应用程序会挂起?请告诉我使用嵌套的scrollview实现分页的正确方法在包中添加此类Android 如何使用NestedScrollView进行分页?,android,android-recyclerview,pagination,android-nestedscrollview,recyclerview-layout,Android,Android Recyclerview,Pagination,Android Nestedscrollview,Recyclerview Layout,当我使用嵌套滚动视图进行分页时,会花费太多时间,有时我的应用程序会挂起?请告诉我使用嵌套的scrollview实现分页的正确方法在包中添加此类 import android.content.Context; import android.support.v4.widget.NestedScrollView; import android.util.AttributeSet; import android.view.View; public class TouchDetectableSc
import android.content.Context;
import android.support.v4.widget.NestedScrollView;
import android.util.AttributeSet;
import android.view.View;
public class TouchDetectableScrollView extends NestedScrollView {
OnMyScrollChangeListener myScrollChangeListener;
public TouchDetectableScrollView(Context context) {
super(context);
}
public TouchDetectableScrollView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public TouchDetectableScrollView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@Override
protected void onScrollChanged(int l, int t, int oldl, int oldt) {
super.onScrollChanged(l, t, oldl, oldt);
if (myScrollChangeListener!=null)
{
if (t>oldt)
{
myScrollChangeListener.onScrollDown();
}
else if (t<oldt){
myScrollChangeListener.onScrollUp();
}
View view = (View) getChildAt(getChildCount()-1);
int diff = (view.getBottom()-(getHeight()+getScrollY()));
if (diff == 0 ) {
myScrollChangeListener.onBottomReached();
}
}
}
public OnMyScrollChangeListener getMyScrollChangeListener() {
return myScrollChangeListener;
}
public void setMyScrollChangeListener(OnMyScrollChangeListener myScrollChangeListener) {
this.myScrollChangeListener = myScrollChangeListener;
}
public interface OnMyScrollChangeListener
{
public void onScrollUp();
public void onScrollDown();
public void onBottomReached();
}
}
在
方法中执行分页任务
方法在包中添加此类
import android.content.Context;
import android.support.v4.widget.NestedScrollView;
import android.util.AttributeSet;
import android.view.View;
public class TouchDetectableScrollView extends NestedScrollView {
OnMyScrollChangeListener myScrollChangeListener;
public TouchDetectableScrollView(Context context) {
super(context);
}
public TouchDetectableScrollView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public TouchDetectableScrollView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@Override
protected void onScrollChanged(int l, int t, int oldl, int oldt) {
super.onScrollChanged(l, t, oldl, oldt);
if (myScrollChangeListener!=null)
{
if (t>oldt)
{
myScrollChangeListener.onScrollDown();
}
else if (t<oldt){
myScrollChangeListener.onScrollUp();
}
View view = (View) getChildAt(getChildCount()-1);
int diff = (view.getBottom()-(getHeight()+getScrollY()));
if (diff == 0 ) {
myScrollChangeListener.onBottomReached();
}
}
}
public OnMyScrollChangeListener getMyScrollChangeListener() {
return myScrollChangeListener;
}
public void setMyScrollChangeListener(OnMyScrollChangeListener myScrollChangeListener) {
this.myScrollChangeListener = myScrollChangeListener;
}
public interface OnMyScrollChangeListener
{
public void onScrollUp();
public void onScrollDown();
public void onBottomReached();
}
}
在
方法中执行分页任务
方法1。将“回收器”视图的嵌套滚动启用设置为false
recyclerView.setNestedScrollingEnabled(false)
2.将滚动列表添加到嵌套滚动视图中
nestedScrollView.setOnScrollChangeListener(new NestedScrollView.OnScrollChangeListener() {
@Override
public void onScrollChange(NestedScrollView v, int scrollX, int scrollY, int oldScrollX, int oldScrollY) {
if (isFeedsFetchInProgress)
return;
if(!mOnLastPage) {
int visibleItemCount = linearLayoutManager.getChildCount();
int totalItemCount = linearLayoutManager.getItemCount();
int pastVisibleItems = linearLayoutManager.findFirstVisibleItemPosition();
if (pastVisibleItems + visibleItemCount >= totalItemCount) {
//End of list
mPageToRequest++;
loader = LOADER.BOTTOM;
hitApiRequest(ApiConstants.REQUEST_TYPE.GET_REFERRAL_LIST);
}
}
// int topRowVerticalPosition = (recyclerView == null || recyclerView.getChildCount() == 0) ? 0 : recyclerView.getChildAt(0).getTop();
swipeRefreshLayout.setEnabled(scrollY <= 0);
}
});
nestedScrollView.setOnScrollChangeListener(新的nestedScrollView.OnScrollChangeListener(){
@凌驾
public void onScrollChange(嵌套ScrollView v、int scrollX、int scrollY、int oldScrollX、int oldScrollY){
如果(isFeedsFetchInProgress)
回来
如果(!mOnLastPage){
int visibleItemCount=linearLayoutManager.getChildCount();
int totalItemCount=linearLayoutManager.getItemCount();
int pastVisibleItems=linearLayoutManager.findFirstVisibleItemPosition();
如果(pastVisibleItems+visibleItemCount>=totalItemCount){
//列表末尾
mPageToRequest++;
loader=loader.BOTTOM;
hitApiRequest(ApiConstants.REQUEST\u TYPE.GET\u reference\u LIST);
}
}
//int-topRowVerticalPosition=(recyclerView==null | | recyclerView.getChildCount()==0)?0:recyclerView.getChildAt(0).getTop();
swipeRefreshLayout.setEnabled(scrollY1.设置嵌套滚动启用回收器视图的false
recyclerView.setNestedScrollingEnabled(false)
2.将滚动列表添加到嵌套滚动视图中
nestedScrollView.setOnScrollChangeListener(new NestedScrollView.OnScrollChangeListener() {
@Override
public void onScrollChange(NestedScrollView v, int scrollX, int scrollY, int oldScrollX, int oldScrollY) {
if (isFeedsFetchInProgress)
return;
if(!mOnLastPage) {
int visibleItemCount = linearLayoutManager.getChildCount();
int totalItemCount = linearLayoutManager.getItemCount();
int pastVisibleItems = linearLayoutManager.findFirstVisibleItemPosition();
if (pastVisibleItems + visibleItemCount >= totalItemCount) {
//End of list
mPageToRequest++;
loader = LOADER.BOTTOM;
hitApiRequest(ApiConstants.REQUEST_TYPE.GET_REFERRAL_LIST);
}
}
// int topRowVerticalPosition = (recyclerView == null || recyclerView.getChildCount() == 0) ? 0 : recyclerView.getChildAt(0).getTop();
swipeRefreshLayout.setEnabled(scrollY <= 0);
}
});
nestedScrollView.setOnScrollChangeListener(新的nestedScrollView.OnScrollChangeListener(){
@凌驾
public void onScrollChange(嵌套ScrollView v、int scrollX、int scrollY、int oldScrollX、int oldScrollY){
如果(isFeedsFetchInProgress)
回来
如果(!mOnLastPage){
int visibleItemCount=linearLayoutManager.getChildCount();
int totalItemCount=linearLayoutManager.getItemCount();
int pastVisibleItems=linearLayoutManager.findFirstVisibleItemPosition();
如果(pastVisibleItems+visibleItemCount>=totalItemCount){
//列表末尾
mPageToRequest++;
loader=loader.BOTTOM;
hitApiRequest(ApiConstants.REQUEST\u TYPE.GET\u reference\u LIST);
}
}
//int-topRowVerticalPosition=(recyclerView==null | | recyclerView.getChildCount()==0)?0:recyclerView.getChildAt(0).getTop();
swipeRefreshLayout.setEnabled(scrollY你的意思是在RecyclerView
中分页?我的RecyclerView在NestedScrollView中,所以我从NestedScrollView获得操作响应抱歉,我不知道你想实现什么我用NestedScrollView操作处理所有分页..因为NestedScrollView是我的父视图。你的RecyclerView花费了很多时间,因为我t在NestedScrollView中,它得到了完整的长度。因此它会一直自动调用下一页,直到结束(您可以检查日志)。你的意思是在RecyclerView
中分页吗?我的RecyclerView在NestedScrollView中,所以我从NestedScrollView获得操作响应抱歉,我不知道你想实现什么。我用NestedScrollView操作处理了所有分页。因为NestedScrollView是我的父视图。你的RecyclerView花费了很多时间,因为它是inside嵌套了ScrollView,它正在获取完整的长度。因此,它会一直自动调用下一页,直到结束(您可以检查日志)。是的,它可以正常工作,谢谢。。但它的加载时间太长。可能是internet问题,您使用哪个库进行API调用?不,这不是internet问题。我正在使用Retrofil库进行连接。您的自定义嵌套ScrollView可以正常工作,但无法在ViewPager选项卡中工作?是的,它可以正常工作,谢谢。。但它需要太多时间加载。可能是internet问题,您正在使用哪个库进行API调用?不,这不是internet问题。我正在使用Retrofil库进行连接您的自定义嵌套ScrollView工作正常,但在ViewPager选项卡中不工作?