[英]If-statement in RecyclerView ViewHolder causes item duplication
如何在滾動時使用自定義視圖實現 if 語句,而不會導致該視圖在其他項目(重復)中多次出現?
我有一個 RecyclerView 和一個按預期工作的自定義視圖。 但是,我在每個列表項中都有一個小圖像圖標,僅當列表項的 textView 之一被填寫時才會出現。 當我嘗試在自定義視圖中實現 if 語句時,當我滾動 RecyclerView 時,它會導致該視圖重復。
順便說一句,如果我使用
@Override
public int getItemViewType(int position) {
return position;
}
它可以防止重復,但也會導致 animation 問題與“滑動關閉”功能。 它不再平滑,但似乎有點閃爍或小故障。 下面是我的 ViewHolder:
private class CustomViewHolder extends RecyclerView.ViewHolder {
ImageView candidateMainImage;
ImageView careerIcon;
TextView candidateCareerText;
TextView candidateBioText;
CustomViewHolder(View itemView) {
super(itemView);
candidateMainImage = itemView.findViewById(R.id.imageview_swipe_profile_container);
careerIcon = itemView.findViewById(R.id.imageview_swipe_career_icon);
candidateCareerText = itemView.findViewById(R.id.textview_swipe_career_display);
candidateBioText = itemView.findViewById(R.id.textview_swipe_bio_display);
mContext = itemView.getContext();
}
void bind(SwipeCandidate candidate) {
StorageReference candidateImageReference = candidate.getCandidateImageReference();
GlideApp.with(candidateMainImage)
.load(candidateImageReference)
.into(candidateMainImage);
String textCareer = candidate.getCandidateCareer();
candidateCareerText.setText(textCareer);
candidateCareerText.setVisibility(View.VISIBLE);
String bio = candidate.getCandidateBio();
candidateBioText.setText(bio);
candidateBioText.setVisibility(View.VISIBLE);
if (!TextUtils.isEmpty(candidate.getCandidateCareer())) {
careerIcon.setVisibility(View.VISIBLE); // This gets duplicated into unwanted items
}
}
}
ViewHolder
在項目之間被回收,因此如果 Candidate.getCandidateCareer candidate.getCandidateCareer()
不為空,您需要將 state 重置為默認值:
if (!TextUtils.isEmpty(candidate.getCandidateCareer())) {
careerIcon.setVisibility(View.VISIBLE); // This gets duplicated into unwanted items
} else {
careerIcon.setVisibility(View.GONE); // or whatever your default is
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.