如何在具有潜在大数据源的 RecyclerView 中实现分页机制?
How to implement a paging mechanism into a RecyclerView with a potentially big data source?
我正在寻找一种在我的 RecyclerView
列表中实施分页机制的好方法。我正在使用 AsyncTaskLoader
将数据填充并缓存到 RecyclerView
.
public class HeadlinesListLoader extends AsyncTaskLoader<List<Headline>> {
public HeadlinesListLoader(Context context) {
super(context);
}
@Override
protected void onStartLoading() {
forceLoad();
}
@Override
public List<Headline> loadInBackground() {
return DataManager.getInstance().findAllHealines();
}
@Override
public void deliverResult(List<Headline> data) {
super.deliverResult(data);
}
}
其中 DataManager.getInstance().findAllHealines(); 进行 RESTful 调用以检索列表数据,但是,它当前正在加载所有数据一次,这可能需要很长时间。
我一直在寻找一种有效的方法来根据需要逐渐将数据加载到 RecyclerView 中。我遇到了 Android 推荐的这个分页库:
https://developer.android.com/topic/libraries/architecture/paging.html
但是,它在前端查询数据库的方式在我的案例中听起来不像是正确的解决方案,而且由于我使用的是 AsyncTaskLoader,我想知道是否有办法解决这个问题使用 Loaders 框架本身?或者什么是更好的选择?
我愿意接受任何建议。谢谢。
您可以在滚动事件上执行此操作。
YourListElement.addOnScrollListener(new RecyclerView.OnScrollListener() {
boolean isSlidingToLast = false;
int lastVisibleItemPosition = 0;
int lastPositions = 0;
@Override
public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
if (newState == RecyclerView.SCROLL_STATE_IDLE && linearLayoutManager.getItemCount() > 0) {
lastPositions = linearLayoutManager.getItemCount();
lastVisibleItemPosition = linearLayoutManager.findLastVisibleItemPosition();
if (lastPositions - 1 == lastVisibleItemPosition && isSlidingToLast) {
loadData(false);
}
}
}
@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
super.onScrolled(recyclerView, dx, dy);
isSlidingToLast = dy > 0;
}
});
加载数据是获取新数据填充的函数
我正在寻找一种在我的 RecyclerView
列表中实施分页机制的好方法。我正在使用 AsyncTaskLoader
将数据填充并缓存到 RecyclerView
.
public class HeadlinesListLoader extends AsyncTaskLoader<List<Headline>> {
public HeadlinesListLoader(Context context) {
super(context);
}
@Override
protected void onStartLoading() {
forceLoad();
}
@Override
public List<Headline> loadInBackground() {
return DataManager.getInstance().findAllHealines();
}
@Override
public void deliverResult(List<Headline> data) {
super.deliverResult(data);
}
}
其中 DataManager.getInstance().findAllHealines(); 进行 RESTful 调用以检索列表数据,但是,它当前正在加载所有数据一次,这可能需要很长时间。
我一直在寻找一种有效的方法来根据需要逐渐将数据加载到 RecyclerView 中。我遇到了 Android 推荐的这个分页库:
https://developer.android.com/topic/libraries/architecture/paging.html
但是,它在前端查询数据库的方式在我的案例中听起来不像是正确的解决方案,而且由于我使用的是 AsyncTaskLoader,我想知道是否有办法解决这个问题使用 Loaders 框架本身?或者什么是更好的选择?
我愿意接受任何建议。谢谢。
您可以在滚动事件上执行此操作。
YourListElement.addOnScrollListener(new RecyclerView.OnScrollListener() {
boolean isSlidingToLast = false;
int lastVisibleItemPosition = 0;
int lastPositions = 0;
@Override
public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
if (newState == RecyclerView.SCROLL_STATE_IDLE && linearLayoutManager.getItemCount() > 0) {
lastPositions = linearLayoutManager.getItemCount();
lastVisibleItemPosition = linearLayoutManager.findLastVisibleItemPosition();
if (lastPositions - 1 == lastVisibleItemPosition && isSlidingToLast) {
loadData(false);
}
}
}
@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
super.onScrolled(recyclerView, dx, dy);
isSlidingToLast = dy > 0;
}
});
加载数据是获取新数据填充的函数