RecyclerView复制项目

时间:2017-06-23 07:13:32

标签: java android android-recyclerview

我看了相同的主题,发现没有什么可以帮助我。 所以这是我的问题。我有一个使用RecyclerView的活动。我正在使用Retrofit2库来获取新闻列表,这里是:

@GET(VERSION_V1 + "/news")
    Observable<BaseResponse<NewsListResponse>> getCompanyNews(@Query("companyId") String companyId,
                                                              @Query("query") String query,
                                                              @Query("offset") Integer offset,
                                                              @Query("limit") Integer limit,
                                                              @Query("creator") NewsCreatorType creator,
                                                              @Query("date")NewsFilterType dateFilter);

我有一位主持人:

public void loadData(boolean refresh) {
    mCoreServices
            .getApiService()
            .getApi()
            .getCompanyNews(mCompanyId, "", 0, 100, mCompanyId == null ? NewsCreatorType.SYSTEM : NewsCreatorType.COMPANY, mFilterType)
            .map(response -> response.getResult().getItems())
            .flatMap(news -> {
                if (mCompanyId == null || "".equals(mCompanyId)) {
                    return Observable.just(news);
                } else {
                    return mCoreServices
                            .getApiService()
                            .getApi()
                            .getCompanyNews(null, "", 0, 100, NewsCreatorType.SYSTEM, mFilterType)
                            .map(response -> {
                                news.addAll(response.getResult().getItems());

                                return news;
                            });
                }
            })
            .flatMapIterable(newsItems -> newsItems)
            .map(NewsViewModel::new)
            .toSortedList((news1, news2) -> news2.getDate().compareTo(news1.getDate()))
            .retryWhen(errors -> retryAfterRefreshToken(errors))
            .subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread())
            .doOnSubscribe(() -> {
                if (refresh) {
                    getViewState().onShowRefresh(true);
                } else {
                    getViewState().onShowProgressBar(true);
                }

            })
            .doOnUnsubscribe(() -> {
                if (refresh) {
                    getViewState().onShowRefresh(false);
                } else {
                    getViewState().onShowProgressBar(false);
                }
            })
            .subscribe(news -> {
                mResults = news;

                getViewState().onLoadNews(mResults);
            }, new ApiExceptionObservable(TAG) {
                @Override
                public void call(String message) {
                    getViewState().onShowErrorMessage(message);
                }

                @Override
                public void unauthorized() {
                    getViewState().showUnauthorizedDialog();
                }
            });
}

而且我有一个RecyclerView适配器,这是我的onBindViewHolder

@Override
public void onBindViewHolder(RecyclerView.ViewHolder baseHolder, int position) {
    if (baseHolder instanceof ViewHolder) {
        ViewHolder holder = (ViewHolder) baseHolder;

        NewsViewModel newsViewModel = mResults.get(position);

        holder.mTVTitle.setText(newsViewModel.getTitle());
        holder.mTVContent.setText(newsViewModel.getContent());

        if (NewsCreatorType.SYSTEM.equals(newsViewModel.getCreator())) {
            holder.mTVCreator.setText(newsViewModel.getCreator().getTitle());
        } else {
            holder.mTVCreator.setText(
                    holder.mTVCreator.getContext().getString(
                            newsViewModel.getCreator().getTitle(),
                            mCompanyTitle
                    )
            );
        }
    }
}

好吧,我有2家公司在做新闻。来自公司#1的新闻不重复,来自公司#2的新闻总是重复的......我不明白我的错误在哪里。我检查(使用调试器)我的GET上的答案,它没有重复的新闻,所以我的适配器的问题我猜... 谢谢。

修改 我只从Creator.SYSTEM获得重复的新闻。

EDIT 2.0: 好的,我在演示者中删除了.flatMap,现在它工作正常,但我无法理解它为什么存在,有人可以解释一下吗?

0 个答案:

没有答案