我的 AsyncTask 从json url加载数据并存储在object中。它将对象中的所有数据加载一次。
itemname.add(new ITNAME(CID, itemName));
它会立即在回收站视图上加载数据。我希望适配器不会立即显示所有数据,我希望它显示前10个项目,当滚动到结束加载另外10个项目时。我在回收器适配器中添加了onScrolled方法:
recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
super.onScrolled(recyclerView, dx, dy);
totalItemCount = linearLayoutManager.getItemCount();
Log.e("Total Item Count:", String.valueOf(totalItemCount));
visibleThreshold = linearLayoutManager.getChildCount();
Log.e("Visi Item Count:", String.valueOf(visibleThreshold));
lastVisibleItem = linearLayoutManager.findLastVisibleItemPosition();
if (!loading && totalItemCount <= (lastVisibleItem + visibleThreshold)) {
// End has been reached
// Do something
if (onLoadMoreListener != null) {
onLoadMoreListener.onLoadMore();
}
loading = true;
}
}
});
但它会加载所有数据。我认为这是因为异步任务一次加载数据并将其传递给适配器:
mAdapter = new ITEMListAdapter(ITEMListActivity.this, itemname, recyclerview);
我不想更改我的异步任务,因为它工作正常,我希望一次获取数据。我尝试这样做https://gist.github.com/ssinss/e06f12ef66c51252563e但不起作用。我搜索了很多,但很多例子都是这样的http://android-pratap.blogspot.in/2015/01/endless-recyclerview-onscrolllistener.html,他们使用循环在开始时加载有限的数据,然后在加载时再次循环。这些示例与我的代码非常不同,因为我的数据已预先加载到对象中。我想要的是在开始时加载有限的数据,然后在滚动时加载下一组数据......等等。
答案 0 :(得分:0)
如果您加载所有数据,但只想显示其中的一部分(您提到了10个项目),而不是简单地将项目数量分成列表。
第一个包含所有数据,第二个是空的。从asynctask接收数据时,从第一个列表中删除项目数量,并将它们放在第二个列表中。
第二个列表适用于您的适配器。删除和添加项目后,通知ui,您的列表中有新项目(例如notifyDataSetChanged)。当滚动到达底部时,重复此操作,直到您的第一个列表为空。
希望这会给出一个想法。