RecyclerView ViewHolder中的If语句导致项目重复

问题描述 投票:0回答:1

我如何在使用自定义查看器的情况下实现if语句,而又不会导致该视图在滚动时在其他项目(重复项)中多次出现?

我有一个RecyclerView,带有一个自定义的观察器,可以按预期工作。但是,我在每个列表项中都有一个很小的图像图标,仅当该列表项的textView之一被填写时才应显示。当我尝试在自定义查看器中实现if语句时,当我滚动RecyclerView时,它将导致该视图重复。

顺便说一下,如果我使用

@Override
public int getItemViewType(int position) {
     return position;
}

它防止重复,但也会导致动画问题,并带有“滑动消除”功能。它不再平滑,但似乎有点眨眼或出现故障。以下是我的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
            }
        }
    }
java android if-statement android-recyclerview android-viewholder
1个回答
0
投票

ViewHolder在项目之间回收,因此如果candidate.getCandidateCareer()not空,则需要将状态重置为默认值:

            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
            }

0
投票

只需在此处离开Rajnish答案,以便其他人来。

解决方案也只是添加一个“ else”语句,所以我的最终代码如下:

if (!TextUtils.isEmpty(candidate.getCandidateCareer())) {
                careerIcon.setVisibility(View.VISIBLE);
            } else {
                careerIcon.setVisibility(View.GONE);
            }
© www.soinside.com 2019 - 2024. All rights reserved.