我在json中有大约32条记录,我正在使用RecyclerView来显示它们,并且我已经实现了OnScrollListener(...)
问题
我开始了一个活动,我获取了所有的32条记录,现在当我滚动的时候,为什么我一次又一次地获得相同的32条记录,每当我滚动的时候,这是我的OnScrollListener()实现。
public void initializeOnScrollForRecyclerView() {
mRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
int visibleItemCount = recyclerView.getLayoutManager().getChildCount();
int totalItemCount = recyclerView.getLayoutManager().getItemCount();
int pastVisiblesItems = ((LinearLayoutManager) recyclerView.getLayoutManager()).findFirstVisibleItemPosition();
if (!isLoading) {
if ((visibleItemCount + pastVisiblesItems) >= totalItemCount) {
isLoading = true;
mPostPresenter.loadPosts(false);
}
}
}
});
}发布于 2016-03-12 14:27:14
这个实现看起来是正确的,但是有一种情况它失败了,尝试当dy >0时像这样(也把这个放在活动的OnCreate中):
private boolean loading = true;
recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
super.onScrollStateChanged(recyclerView, newState);
}
@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy)
{
if (loading) {
if (dy > 0) //check for scroll down
{
visibleItemCount = layoutManager.getChildCount();
totalItemCount = layoutManager.getItemCount();
pastVisiblesItems = layoutManager.findFirstVisibleItemPosition();
if ((visibleItemCount + pastVisiblesItems) >= totalItemCount) {
loading = false;
Log.v("...", " Reached Last Item");
loadMoreVideos(searchVideos);
}
}
}
}
});发布于 2016-03-12 14:53:52
你正在使用这个
if ((visibleItemCount + pastVisiblesItems) >= totalItemCount) 这意味着一旦您查看了22条记录,您将再次加载。当再次加载时,您将获得相同的数据并将其添加到列表中。
我可以看到您正在使用RXjava。当您在loadPost中订阅时,请检查您的观察者正在发出的数据。我认为它再次发出相同的数据,即您的32条记录,这些记录被再次添加,这是一个无尽的循环。
发布于 2018-02-08 19:29:34
这里有另一种方法,当到达最后一项时触发某些东西
@Override
public void onBindViewHolder(final RecyclerView.ViewHolder holder, int position) {
//When last item is reached
if(position == yourList.size() - 1){
loadMoreMessages();
}
}
public abstract void loadMoreMessages();https://stackoverflow.com/questions/35954410
复制相似问题