Как очистить / удалить все элементы в адаптере списка страниц
Я использую библиотеку подкачки Android, чтобы показать элементы результатов поиска, есть ли способ очистить / удалить все загруженные элементы результатов, вызов Invalidate для живого Paged List, обновляющий список, не очистить / удалить элементы
In Activity:
fun clearSearchResult() {
if (productSearchResultItemAdapter.itemCount > 0) {
viewModel.invalidateResultList()
}
}
In ViewModel
private fun searchProductByTerm(searchTerm: String): Listing<Item> {
sourceFactory = ProductSearchItemDataSourceFactory(productSearchUC, compositeDisposable, searchTerm, resourceResolver)
val livePagedList = LivePagedListBuilder(sourceFactory, pagedListConfig)
//The executor used to fetch additional pages from the DataSource
.setFetchExecutor(getNetworkExecutor())
.build()
return Listing(
pagedList = livePagedList,
networkState = switchMap(sourceFactory.sourceLiveData) {
it.networkState
},
retry = {
sourceFactory.sourceLiveData.value?.retryAllFailed()
}
)
}
fun invalidateResultList() {
sourceFactory?.sourceLiveData?.value?.invalidate()
}
private val productSearchName = MutableLiveData<String>()
private val repoResult = map(productSearchName) {
searchProductByTerm(it)
}
5 ответов
If you're working with PagingDataAdapter, searchAdapter.submitData(lifecycle, PagingData.empty())
works
Отправка null очистить текущий загруженный список страниц
productSearchResultItemAdapter.submitList(null)
В Java:
Я очистил все элементы в PagedListAdapter, вызвав invalidate() в экземпляре DataSource, подобном этому
public void clear(){
movieDataSource.invalidate();
}
Добавьте этот метод в свою ViewModel, затем вызовите его в своей деятельности
movieViewModel.clear();
movieAdapter.notifyDataSetChanged();
Затем загрузите любые данные, которые хотите
Вы можете увидеть, как я этого добился в своем проекте.
Вот ссылка: https://github.com/Marwa-Eltayeb/MovieTrailer
Во фрагменте
lifecycleScope.launch {
viewModel.currentResult = null
viewModel.getSearchAudio(binding.etxtSearch.text.toString().trim(), 0).collectLatest { it ->
Log.v(mTAG, "Status: New record")
adapterAudioList.submitData(it)
}
}
В ViewModel
var currentResult: Flow<PagingData<AudioModel>>? = null
fun getSearchAudio(trackName: String, lastPageCount: Int): Flow<PagingData<AudioModel>> {
val lastResult = currentResult
if (lastResult != null) {
return lastResult
}
val newResult: Flow<PagingData<AudioModel>> = videoRepository.getAudioSearchPaging(trackName, lastPageCount).cachedIn(viewModelScope)
currentResult = newResult
return newResult
}
В видеорепозитории
fun getAudioSearchPaging(trackName: String, lastPageCount: Int): Flow<PagingData<AudioModel>> {
return Pager(
config = PagingConfig(pageSize = KeyConstants.AUDIO_PAGE_SIZE, enablePlaceholders = false),
pagingSourceFactory = { AudioSearchPagingSource(context, trackName, lastPageCount) },
).flow
}
Перед аннулированием очистите ваш элемент данных списка. Как мы сделали простым способом:
list.clear();
adapter.notifyDataSetChanged();