С помощью новой библиотеки Paging3 мы упростили вставку элементов/разделителей в recyclerview, как показано в руководстве Google Android Codelabs https://developer.android.com/codelabs/android-paging#11, но как получить логику вставки элементов в каждую позицию n, скажем, в каждую позицию 10 в переработчик.
Образец кода
fun searchRepo(queryString: String): Flow<PagingData<UiModel>> {
val lastResult = currentSearchResult
if (queryString == currentQueryValue && lastResult != null) {
return lastResult
}
currentQueryValue = queryString
val newResult: Flow<PagingData<UiModel>> = repository.getSearchResultStream(queryString)
.map { pagingData -> pagingData.map { UiModel.RepoItem(it) } }
.map {
it.insertSeparators<UiModel.RepoItem, UiModel> { before, after ->
if (after == null) {
// we're at the end of the list
return@insertSeparators null
}
if (before == null) {
// we're at the beginning of the list
return@insertSeparators UiModel.SeparatorItem("${after.roundedStarCount}0.000+ stars")
}
// check between 2 items
if (before.roundedStarCount > after.roundedStarCount) {
if (after.roundedStarCount >= 1) {
UiModel.SeparatorItem("${after.roundedStarCount}0.000+ stars")
} else {
UiModel.SeparatorItem("< 10.000+ stars")
}
} else {
// no separator
null
}
}
}
.cachedIn(viewModelScope)
currentSearchResult = newResult
return newResult
Как найти логику добавления элемента на каждую 10-ю позицию в приведенном выше примере кода
fun itemInsert(position: Int): Int {
return if (position % 10 == 0) //each 10 position is separator
SEPARATOR else COMMON
}
ItemDecorator
. вы можете изменитьDividerItemDecoration
для работы таким образом. См. stackoverflow.com/questions/ 28713231/. - person ADM   schedule 20.01.2021