簡體   English   中英

RecyclerView ViewHolder中的if語句導致item重復

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM