CymChad / BaseRecyclerViewAdapterHelper

BRVAH:Powerful and flexible RecyclerAdapter
http://www.recyclerview.org/
MIT License
24.28k stars 5.15k forks source link

onLoadMoreRequested 可能存在多次执行情况 #752

Closed stoneLee81 closed 7 years ago

stoneLee81 commented 7 years ago

在使用加载更多时 onLoadMoreRequested

// loadData部分代码 if(loadEnum == LoadEnum.LOADMORE) { mAdapter.addData(list); // mAdapter.notifyDataSetChanged(); }else{ mAdapter.setNewData(list); }

// onloadmore 监听部分代码 @Override public void onLoadMoreRequested() { Log.i(TAG, "onLoadMoreRequested: "); crital.setPage(crital.getPage()+1); loadData(crital.getTypeEnum(), LoadEnum.LOADMORE); }

如果不加入notifyDataSetChanged就会出现重复加载的情况,如果加入了加载正常,但会出现闪屏 (我已经加入了避免闪屏的代码 mRecyclerView.getItemAnimator().setChangeDuration(0);,在不使用notify时,不闪屏正常) 好纠结。。。。

CymChad commented 7 years ago

你的版本是?

stoneLee81 commented 7 years ago

2.6.4的版本

CymChad commented 7 years ago

更新至最新版本,然后按照demo上方法使用。

stoneLee81 commented 7 years ago

升到了2.8.0, mRecyclerView.postDelayed(() -> { crital.setPage(crital.getPage()+1); loadData(crital.getTypeEnum(), LoadEnum.LOADMORE); }, 1000); 还是重复刷新

1109993488 commented 7 years ago

如果不满一屏会自动回调onLoadMoreRequested,外部有Scrollview吗?

stoneLee81 commented 7 years ago

没有使用scrollview,activity 里用的fragment

1109993488 commented 7 years ago

贴一下代码,只要不调用loadMoreComplete就不会去回调onLoadMoreRequested

stoneLee81 commented 7 years ago

我在加载完毕后,调用了loadMoreComplete DEMO里不也是在加载完毕,调用了么?

1109993488 commented 7 years ago

如果没有更多数据了要调用loadMoreEnd(boolean),否则会回调onLoadMoreRequested

1109993488 commented 7 years ago

不要嵌套,嵌套复用机制就没了,可以addHeaderView

CymChad commented 7 years ago

@stoneLee81 问题解决没?

stoneLee81 commented 7 years ago

@CymChad 还是没解决

CymChad commented 7 years ago

还存在上述问题?你的代码调用是按照wiki或demo里面的步奏来的吗?如果可以的话你可以把你现在的代码贴全一些让我们更快的找到问题。

9h0st commented 7 years ago

@stoneLee81 你是怎么解决的 怎么close了 我也存在这个问题 调用refresh之后 还会调用loamore至少一次 有时甚至2、3次

CrazyStoneJy commented 7 years ago

版本:2.9.10 refreshLayout嵌套RecyclerView下拉刷新,数据不满一屏,会调用一次onLoadMoreRequested。

1109993488 commented 7 years ago

@9h0st @CrazyStoneJy 下拉刷新数据时需要判断下数据是否还有下一页,如果没有需要调用loadMoreEnd关闭加载更多。比如setNewData传入的大小是1的话(不满一屏)会回调加载更多,如果一屏以上滑动到底部触发。