[英]In Recycler View with multiple view types items duplicating on scrollup
我有一個具有多種視圖類型和分頁功能的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;
}
嘗試這樣的事情:
@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視圖類型就是您唯一的真理來源。
對於在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
}
}
});
因為在分頁中,您可以在Recycler視圖中的頁面滾動中從Api獲取數據。 因此,數據將根據頁數成塊出現。 為此,您可以在回收商列表中的滾動偵聽器上使用,並在列表滾動時刷新數據,直到列表的最后一項到達。 我希望它將對您有幫助:)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.