向下滚动时,recyclerview中的嵌套滚动视图不会触发onscrolllistener [英] nested scrollview inside recyclerview not triggering onscrolllistener when scrolling down
问题描述
修改:
我已经从Web服务加载了200多个数据.当我向下滚动recyclerview时,它并没有触发scrollLisener.
I have loading more than 200 datas from webservice.When I am scrolling down the recyclerview, it is not triggering the scrollLisener.
因为,如果我不使用dy> 0条件,它将首先加载所有接下来的20个数据,20个数据,依此类推,最初是在进行此活动时.
Because, if I'm not used dy>0 condition, it is loading all next 20 datas, 20 datas and so on, initially when coming to this activity.
下面,我发布了与此相关的代码.
Below I have posted the code relevant to that.
Logcat:
E/dy: 0
活动代码:
recyclerView = (RecyclerView) findViewById(R.id.rv_list_tab_home_recycler);
recyclerView.setHasFixedSize(true);
mLayoutManager = new LinearLayoutManager(this);
recyclerView.setLayoutManager(mLayoutManager);
//homePostitemsAdapter = new UserPostAdapter(TabHomeActivity.this, homePostItemsList);
homePostitemsAdapter = new TabHomeAdapter(homePostItemsList, recyclerView);
// recyclerView.setItemAnimator(new DefaultItemAnimator());
recyclerView.setAdapter(homePostitemsAdapter);
recyclerView.setNestedScrollingEnabled(false);
适配器代码:
private int visibleThreshold = 5;
private int lastVisibleItem, totalItemCount;
private boolean loading;
private OnLoadMoreListener onLoadMoreListener;
public TabHomeAdapter(List<HomePostItems> objects, RecyclerView recycle) {
homePostArrListItems = objects;
if (recycle.getLayoutManager() instanceof LinearLayoutManager) {
final LinearLayoutManager linearLayoutManager = (LinearLayoutManager) recycle
.getLayoutManager();
Log.e("LinearLayoutManager", "Test");
recycle.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrolled(RecyclerView recyclerView,
int dx, int dy) {
super.onScrolled(recyclerView, dx, dy);
totalItemCount = linearLayoutManager.getItemCount();
lastVisibleItem = linearLayoutManager
.findLastVisibleItemPosition();
Log.e("dy", ""+dy);
if (!loading
&& totalItemCount <= (lastVisibleItem + visibleThreshold ) && dy > 0) {
// End has been reached
// Do something
Log.e("totalItemCount", ""+totalItemCount);
Log.e("lastVisibleItem", ""+lastVisibleItem);
Log.e("visibleThreshold", ""+visibleThreshold);
Log.e("loading", ""+loading);
Log.e("onLoadMoreListener", ""+onLoadMoreListener);
if (onLoadMoreListener != null) {;
onLoadMoreListener.onLoadMore();
}
loading = true;
}
}
});
}
public void setLoaded() {
loading = false;
}
@Override
public int getItemCount() {
return homePostArrListItems.size();
}
public void setOnLoadMoreListener(OnLoadMoreListener onLoadMoreListener) {
this.onLoadMoreListener = onLoadMoreListener;
}
public static class ProgressViewHolder extends RecyclerView.ViewHolder {
public ProgressBar progressBar;
public ProgressViewHolder(View v) {
super(v);
progressBar = (ProgressBar) v.findViewById(R.id.progressBar1);
}
}
}
当我最初参加此活动时,我将dy设为0.当滚动RecyclerView
时,dy不会在LogCat
中触发.
When I initially came to this activity, I am getting dy as 0. When I'm scrolling the RecyclerView
, dy is not triggering in LogCat
.
我认为由于NestedScrollView
,它无法正常工作.但是我需要嵌套滚动视图,因为我需要在RecyclerView
之前向下滚动一些视图.
I think because of the NestedScrollView
it is not working.But I need nested scroll view because I need to scroll down some views before RecyclerView
.
推荐答案
如果要延迟加载,请查看我的RecyclerAdapter
If it is lazy loading you want then have a look at my RecyclerAdapter
@Override
public void onBindViewHolder(VH viewHolder, final int position) {
// Set Data to Views
if(position == count) {
// When last item is reached.
if (onLoadMoreListener != null) {;
onLoadMoreListener.onLoadMore();
}
}
}
我认为这是实现延迟加载的更简单且相当便宜的方法.
I think this is easier and fairly inexpensive way to achieve lazy loading.
这篇关于向下滚动时,recyclerview中的嵌套滚动视图不会触发onscrolllistener的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!