Передача данных в PageKeyedDataSource - PullRequest
0 голосов
/ 05 октября 2018

Я использую PageKeyedDataSource для подкачки страниц, вызывая API и используя Retrofit.

И я использую Dagger 2 для внедрения зависимости.

@Provides
Repository provideRepository(...) {
    ...
}

@Provides
PageKeyedVideosDataSource providePageKeyeVideosDataSource(Repository repository) {
    ...
}

@Provides
VideoDataSourceFactory provideVideoDataSourceFactory(PageKeyedHomeVideosDataSource pageKeyedHomeVideosDataSource) {
    ...
}

@Provides
ViewModelFactory provideViewModelFactory(Repository repository, VideoDataSourceFactory videoDataSourceFactory) {
    ...
}

Теперь мне нужно сделать то же самое, однако моему вызову нужен новый параметр: идентификатор.

@GET(Urls.VIDEOS_BY_CATEGORY)
    Observable<RequestVideo> getVideosByCategory(
            @Path("id") int categoryId,  // <-- Now I need this new parameter
            @Query("per-page") int perPage,
            @Query("page") int page);

Раньше моему источнику PageKeyedVideosDataSource требовались только страница и страница для вызова, это было легко.Однако теперь мне нужно динамически поместить этот новый идентификатор параметра в PageKeyedDataSource.

Я увидел PagingWithNetworkSample и понял, что они добавили новый параметр в PagedKeyedDataSource, добавив его в конструктор.Затем я подумал об этом:

public PageKeyedCategoryVideosDataSource(int categoryId, Repository repository) {
    this.categoryId = categoryId;
    this.repository = repository;
}

Однако, если я добавлю идентификатор в конструктор, я думаю, что больше не смогу использовать кинжал 2, потому что при использовании кинжала 2 источник PageKeyedVideosDataSource несоздается динамически, поэтому я не могу продолжать изменять значение идентификатора.

Мне нужно динамически создать PageKeyedDataSource следующим образом:

int categoryId = getCategoryId();
PageKeyedVideosDataSource dataSource = new PageKeyedVideosDataSource(categoryId, repository);
  • Должен ли я сделать это ине использовать Dagger 2?
  • Возможно ли динамически создавать источник данных, все еще используя Dagger 2?
...