问题
当用户滚动到RecyclerView的底部时,我尝试加载更多数据。我找到了一个解决方案here,它可以检测到它并在到达recyclerView的底部时加载mre。 但是,通过记录任务信息,我发现,当它到达底部时,负载更多的AsyncTask将执行两次或更多。由于从API请求数据的限制率,我真的希望AsyncTask只执行一次。 addOnScrollListener如下:
mRecyclerViewHome.addOnScrollListener(new OnScrollListener() {
@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
super.onScrolled(recyclerView, dx, dy);
int visibleItemCount = layoutManager.getChildCount();
int totalItemCount = layoutManager.getItemCount();
int pastVisibleItems = layoutManager.findFirstVisibleItemPosition();
PullPrevTask pullPrevTask = new PullPrevTask();
if (pastVisibleItems + visibleItemCount >= totalItemCount) {
try {
pullPrevTask.execute();
} catch (Exception e) {
e.printStackTrace();
}
mRecyclerViewHome.scrollBy(0, 100);
Log.i(TAG, "reached bottom + pull task called");
}
}
});
我试过了: if语句中的recyclerView.scrollTo()。但是,recyclerView不会滚动。
问题:
如何防止它在这里创建deplicate AsynTask实例?因为每次到达recyclerView的底部时,都需要刷新,我不能使AsynTask成为成员变量。