Android 为什么页面列表适配器加载所有数据而不考虑页面大小?
我已将页面大小设置为10,观察者中的页面大小给出了正确的大小,但数据库(文件室)中的所有项目都将加载到视图持有者 正在使用数据库中的最后一项调用边界回调OnItemEndLoaded 以下是我的配置:Android 为什么页面列表适配器加载所有数据而不考虑页面大小?,android,android-room,pagedlist,android-paging,android-paging-library,Android,Android Room,Pagedlist,Android Paging,Android Paging Library,我已将页面大小设置为10,观察者中的页面大小给出了正确的大小,但数据库(文件室)中的所有项目都将加载到视图持有者 正在使用数据库中的最后一项调用边界回调OnItemEndLoaded 以下是我的配置: public LiveData<PagedList<Design>> getDesignList(List<String> types, String idCode){ DataSource.Factory<Integer, Design>
public LiveData<PagedList<Design>> getDesignList(List<String> types, String idCode){
DataSource.Factory<Integer, Design> factory = mRepository.getDesigns(types, idCode);
PagedList.Config pagedListConfig =
(new PagedList.Config.Builder())
.setEnablePlaceholders(false)
.setInitialLoadSizeHint(10)
.setPageSize(10)
.build();
return new LivePagedListBuilder<>(factory, pagedListConfig)
.setBoundaryCallback(**boundCallBack**)
.setFetchExecutor(mRepository.mIoExecutor)
.build();
}
public LiveData getDesignList(列表类型,字符串idCode){
DataSource.Factory Factory=mRepository.getDesigns(类型,idCode);
PagedList.Config pagedListConfig=
(新建PagedList.Config.Builder())
.setEnablePlaceholders(false)
.setInitialLoadSizeHint(10)
.setPageSize(10)
.build();
返回新的LivePagedListBuilder(工厂,pagedListConfig)
.setBoundaryCallback(**BoundaryCallback**)
.setFetchExecutor(mRepository.miExecutor)
.build();
}
存储库(mRepository.getDesigns):
public DataSource.Factory getDesigns(列表类型,字符串idCode){
返回designDao.getDesigns(类型,idCode);
}
Dao:(getDesigns)
@Query(“从设计中选择*,其中设计输入(:type)和id=:idCode按设计顺序\u id ASC”)
Factory GetDesign(列表类型、字符串ID代码);
边界回调(boundCallBack):
公共类BoundCall扩展了PagedList.BoundaryCallback{
公共电话(){
超级();
}
@凌驾
ZeroItemsLoaded()上的公共无效{
super.onZeroItemsLoaded();
fetchFromNetwork(空);
Log.e(“加载”、“零项加载的人员”);
}
@凌驾
已加载的公共项(@NonNull Design itemAtFront){
超级前端加载(itemAtFront);
Log.e(“加载”,“前端加载:”+itemAtFront.getDesignName());
}
@凌驾
已加载公共项(@NonNull Design itemAtEnd){
super.OnItemEnd已加载(ItemEnd);
从网络获取(itemAtEnd);
Log.e(“加载”、“已加载”:+itemAtEnd.getDesignName());
}
}
观察员:
designAdapter = new DesignAdapter(this);
menClothRv.setAdapter(designAdapter);
// Observer to the changed list in the
obs = new Observer<PagedList<Design>>(){
@Override
public void onChanged(PagedList<Design> designs) { //the pagesize is 10 here, but all items are loaded
if(!designs.isEmpty())
designAdapter.submitList(designs);
}
};
designAdapter=新的designAdapter(本);
menClothRv.setAdapter(指定适配器);
//中已更改列表的观察者
obs=新观察员(){
@凌驾
public void onChanged(PagedList设计){//此处的页面大小为10,但所有项目都已加载
如果(!designs.isEmpty())
设计文件。提交清单(设计);
}
};
无法理解:
我甚至还提到了这一点:听起来你的
RecyclerView
在另一个滚动视图中,比如NestedScrollingView
,导致RecyclerView
布局所有项目
您应该始终避免嵌套在同一方向(即,两个方向都垂直)滚动的容器,而是将这两个方向分开,使用第3页内置的页眉功能或
ConcatAdapter
来构建单独的页眉和页脚,这些页眉和页脚将与其他内容一起滚动。听起来您的RecyclerView
位于另一个滚动视图中,例如NestedScrollingView
,使RecyclerView
布局其所有项目
您应该始终避免嵌套在同一方向(即,两个方向都垂直)滚动的容器,而是将这两个方向分开,使用第3页内置的页眉功能或
ConcatAdapter
构建单独的页眉和页脚,与其他内容一起滚动。您的RecyclerView
包含在什么布局中?听起来您的RecyclerView
位于另一个滚动视图中,例如NestedScrollingView
,导致RecyclerView
布局其所有项目。是的,您是对的。这通过将recycler视图放在NestedScrollView之外得到解决。您的RecyclerView
包含在什么布局中?听起来您的RecyclerView
位于另一个滚动视图中,例如NestedScrollingView
,导致RecyclerView
布局其所有项目。是的,您是对的。通过将recycler视图保留在NestedScrollView之外,解决了这个问题。
@Query("SELECT * FROM Design WHERE design_type IN (:types) AND id=:idCode ORDER BY design_id ASC")
DataSource.Factory<Integer, Design> getDesigns(List<String> types, String idCode);
public class BoundCall extends PagedList.BoundaryCallback<Design> {
public BoundCall() {
super();
}
@Override
public void onZeroItemsLoaded() {
super.onZeroItemsLoaded();
fetchFromNetwork(null);
Log.e("load", "men-onZeroItemsLoaded");
}
@Override
public void onItemAtFrontLoaded(@NonNull Design itemAtFront) {
super.onItemAtFrontLoaded(itemAtFront);
Log.e("load", "men-onItemAtFrontLoaded: " + itemAtFront.getDesignName());
}
@Override
public void onItemAtEndLoaded(@NonNull Design itemAtEnd) {
super.onItemAtEndLoaded(itemAtEnd);
fetchFromNetwork(itemAtEnd);
Log.e("load", "men-onItemAtEndLoaded: " + itemAtEnd.getDesignName());
}
}
designAdapter = new DesignAdapter(this);
menClothRv.setAdapter(designAdapter);
// Observer to the changed list in the
obs = new Observer<PagedList<Design>>(){
@Override
public void onChanged(PagedList<Design> designs) { //the pagesize is 10 here, but all items are loaded
if(!designs.isEmpty())
designAdapter.submitList(designs);
}
};