Компоненты архитектуры Android подкачки страниц DataSource.Factory
Я пытаюсь сделать DataSource.Factory
класс, но я получаю ошибку при попытке вернуть мой PageKeyedDataSource
реализация.
class SubredditPageKeyedDataSource(private val service: LedditService,
private val subredditName: String): PageKeyedDataSource<String, Children<DataX>>() {
@SuppressLint("CheckResult")
override fun loadInitial(params: LoadInitialParams<String>, callback: LoadInitialCallback<String, Children<DataX>>) {
service.getSubredditTopics(subredditName).subscribe { result -> callback.onResult(result.data.children, result.data.before, result.data.after) }
}
@SuppressLint("CheckResult")
override fun loadAfter(params: LoadParams<String>, callback: LoadCallback<String, Children<DataX>>) {
service.getSubredditTopicsAfter(subredditName, after = params.key).subscribe {result -> callback.onResult(result.data.children, result.data.after)}
}
override fun loadBefore(params: LoadParams<String>, callback: LoadCallback<String, Children<DataX>>) {
// ignored, since we only ever append to our initial load
}
}
Теперь вот мой завод:
class SubredditDataSourceFactory(private val service: LedditService,
private val subredditName: String): DataSource.Factory<String, List<Children<DataX>>>() {
override fun create(): DataSource<String, List<Children<DataX>>> {
return SubredditPageKeyedDataSource(service, subredditName)
}
}
При возврате моего источника данных в выше create()
метод, AndroidStudio дает мне ошибку IDE:
Type mismatch.
Required: DataSource<String, List<Children<DataX>>>
Found: SubredditPageKeyedDataSource
Я схожу с ума? PageKeyedDataSource
простирается от ContiguousDataSource
который является DataSource
, Почему я получаю несоответствие типов? Я проверил 2 разных примера библиотеки подкачки, и их реализация точно такая же, как у меня. Если я что-то пропустил???
1 ответ
Типы на самом деле не совпадают.
Ваша фабрика предназначена для:
PageKeyedDataSource<String, List<Children<DataX>>>
Но ваш источник данных реализует тип:
PageKeyedDataSource<String, Children<DataX>>
Обратите внимание, что у одного есть список детей с правой стороны, у другого - единственный ребенок. Тот, у которого нет списка<>, должен быть правильным, попробуйте удалить эту часть из своего кода.