我有一个带有多种视图类型和分页功能的recyclerview。在两页之后向上滚动,这些项目将不保存视图并且正在复制。我已经实现了getItemId返回唯一ID和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;
}
答案 0 :(得分:0)
尝试这样的事情:
@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视图类型是您唯一的真理来源。
答案 1 :(得分:0)
要在recyclerview中进行分页,应使用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获取数据。因此,数据将根据页数成块出现。为此,您可以在回收商列表中的滚动侦听器上使用,并在列表滚动时刷新数据,直到列表的最后一项到达。 我希望它会对您有所帮助:)