dev*_*per 11 android android-recyclerview android-paging-library android-paging-3
homeViewModel.pagingDataFlow.subscribe(expensesPagingData -> {
expenseAdapter.submitData(getLifecycle(), expensesPagingData);
}, throwable -> Log.e(TAG, "onCreate: " + throwable.getMessage()));
// ViewModel
private void init() {
pagingDataFlow = homeRepository.init();
CoroutineScope coroutineScope = ViewModelKt.getViewModelScope(this);
PagingRx.cachedIn(pagingDataFlow, coroutineScope);
}
// Repository
public Flowable<PagingData<ExpensesModel>> init() {
// Define Paging Source
expensePagingSource = new ExpensePagingSource(feDataService);
// Create new Pager
Pager<Integer, ExpensesModel> pager = new Pager<Integer, ExpensesModel>(
new PagingConfig(10,
10,
false,
10,
100),
() -> expensePagingSource); // set paging source
// inti Flowable
pagingDataFlow = PagingRx.getFlowable(pager);
return pagingDataFlow;
}
I have tried to invalidate still not working.
public void invalidatePageSource() {
if (expensePagingSource != null) {
expensePagingSource.invalidate();
}
}
Run Code Online (Sandbox Code Playgroud)
使用 ExpenseAdapter.refresh() 刷新适配器时, 当 Pager 期望创建新实例时,会重新使用 PagingSource 的实例。确保传递给 Pager 的 pagingSourceFactory 始终返回 PagingSource 的新实例。 这是我用来获取数据的可流动对象。
任何帮助将不胜感激。
nay*_*rde 15
所以而不是
val pagingSource = PagingSource()
return Pager() {
pagingSource
}.flow
Run Code Online (Sandbox Code Playgroud)
用这个
return Pager() {
PagingSource()
}.flow
Run Code Online (Sandbox Code Playgroud)
基本上,它有助于存储分页资源的引用,稍后当您调用refresh()时,适配器会使用该引用来对其调用invalidate。
您需要使用InvalidatingPagingSourceFactory
(链接)。它包含invalidate()
使所有PagingSource
已分派的内容无效的方法。
你的代码中是这样的:
// Repository
InvalidatingPagingSourceFactory invalidatingFactory =
InvalidatingPagingSourceFactory {
new ExpensePagingSource(feDataService);
}
public Flowable<PagingData<ExpensesModel>> init() {
// Create new Pager
Pager<Integer, ExpensesModel> pager = new Pager<Integer, ExpensesModel>(
new PagingConfig(
10,
10,
false,
10,
100),
invalidatingFactory
);
// inti Flowable
pagingDataFlow = PagingRx.getFlowable(pager);
return pagingDataFlow;
}
public void invalidatePageSource() {
invalidatingFactory.invalidate();
}
Run Code Online (Sandbox Code Playgroud)
我的代码也有类似的问题,我发现这个问题对我有帮助。
分页器的分页源工厂 lambda 必须始终返回源的新实例。在您的情况下,它始终返回您在方法中创建的实例init()
。
尝试将其更改为类似以下内容:
Pager<Integer, ExpensesModel> pager = new Pager<Integer, ExpensesModel>(
new PagingConfig(10,
10,
false,
10,
100),
() -> {new ExpensePagingSource(feDataService)});
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
5015 次 |
最近记录: |