В представлении Recycler с несколькими типами представлений элементы, дублирующиеся при прокрутке - PullRequest
0 голосов
/ 11 октября 2018

У меня есть просмотрщик с несколькими типами просмотра и включенной нумерацией страниц.Прокручивая вверх после двух страниц элементы, не удерживающие представление и дублирующие.Я реализовал getItemId, возвращающий уникальный идентификатор, и getViewtype, возвращающий уникальное значение.Также установите для адаптера setHasStableIds значение true.Ждем любую помощь.Спасибо.

getItemId

if (postList.get(position).getId()== null){
        return position;
    } else{
        return postList.get(position).getId();
    }

getItemViewType

 if (postList.get(position).getPostType().equals("contest")){
            return TYPE_CONTEST;
  } else if(postList.get(position).getPostType().equals("suggestion")){
            return TYPE_SUGGESTION;
        } else{
            return TYPE_POST_POLL;
        }
    } else{
        return TYPE_HEADER;
       }

Ответы [ 2 ]

0 голосов
/ 11 октября 2018

Для разбивки на страницы в представлении переработчика вы должны использовать onScrollListener это

recyclerList.addOnScrollListener(new RecyclerView.OnScrollListener() {
    @Override
    public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
        super.onScrollStateChanged(recyclerView, newState);
    }

    @Override
    public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
        super.onScrolled(recyclerView, dx, dy);

        boolean isLast = isLastItemDisplaying(recyclerView);  //get last displayed item
        if (loading && isLast) {  //this check if your data is loading and if its last list item list will not load again
            loading = false;

            //get your data according to page count it will refresh your recycler list 

        }
    }
});

, потому что в разбивке на страницы вы можете получить данные из Api при прокрутке страницы в представлении переработчика.Таким образом, данные будут поступать кусками в соответствии с количеством страниц.Для этого вы можете использовать приемник прокрутки в списке перезапуска и обновлять данные при прокрутке списка, пока не прибудет последний элемент списка.Я надеюсь, что это поможет вам:)

0 голосов
/ 11 октября 2018

Попробуйте что-то вроде этого:

@Override
public int getItemViewType(int position) {
    if (isValidPosition(position)) {
        Dataset d = mDataset[position];
        if ("contest".equals(d.getViewType())) {
            return VIEW_TYPE_CONTEST;
        } else if ("suggestion".equals(d.getViewType())) {
            return VIEW_TYPE_SUGGESTION;
        }
        // all other cases here
    }
    // default type
    return VIEW_TYPE_CONTEST;
}

и затем:

@Override
public void onBindViewHolder(ViewHolder holder, int position) {
    Dataset d = mDataset[position];

    if (holder instanceof ContestVH) {
        ContestDataset contest = (ContestDataset) d;
        ContestVH vh = (ContestVH) holder;
        // bind your contest views here
    } else if (holder instanceof SuggestionVH) {
        SuggestionDataset suggestion = (SuggestionDataset) d;
        SuggestionVH vh = (SuggestionVH) holder;
        // bind your suggestion views here
    }
    // all other cases here
}

таким образом, ваш тип представления String - ваш единственный источник правды.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...