编辑:
我从Web服务加载了200多条数据。当我向下滚动RecyclerView时,它没有触发scrollListener。
因为,如果我不使用dy>0的条件,它会在最初进入此活动时加载所有下一个20个数据,20个数据等等。
以下是相关代码:
日志记录:
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
时,在LogCat
中没有触发dy。
我认为这是因为有NestedScrollView
的原因,它会导致它不起作用。但我需要嵌套滚动视图,因为我需要在RecyclerView
之前滚动一些视图。