Проблемы с RecyclerView при прокрутке - PullRequest
0 голосов
/ 27 ноября 2018

У меня есть расширяемый RecyclerView, когда данные загружаются в RecyclerView, все кажется хорошим, но когда я прокручиваю до бодема, данные на элементах выше отключались.С точки зрения обычного переработчика я могу решить эту проблему, связав все в моем OnBindViewHolder, но теперь это сложнее.это мой код для расширяемого адаптера:

public class CalendarAdapter extends ExpandableRecyclerViewAdapter<CalendarHeaderViewHolder, CalendarItemViewHolder> {

private Context ctx;

public CalendarAdapter(List<? extends ExpandableGroup> group, Context ctx){
    super(group);
    this.ctx = ctx;
}
@Override
public CalendarHeaderViewHolder onCreateGroupViewHolder(ViewGroup parent, int viewType) {
    View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.group_view_holder, parent, false);
    return new CalendarHeaderViewHolder(view);
}

@Override
public CalendarItemViewHolder onCreateChildViewHolder(ViewGroup parent, int viewType) {
    View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.calendar_item, parent, false);
    return new CalendarItemViewHolder(view,ctx);
}

@Override
public void onBindChildViewHolder(CalendarItemViewHolder holder, int flatPosition, ExpandableGroup group, int childIndex) {
    final CalenderItem calenderItem = ((CalenderHeader) group).getItems().get(childIndex);
    holder.onBind(calenderItem, group);
}

@Override
public void onBindGroupViewHolder(CalendarHeaderViewHolder holder, int flatPosition, ExpandableGroup group) {
    holder.setGroupName(group);
}

}

И я связываю свой держатель в CalendarItemViewHolder

public class CalendarItemViewHolder extends ChildViewHolder {
private TextView tvDescription;
private TextView tvSubDescription;
private TextView tvDate;
private RelativeLayout ivIcon;
private CalenderItem item;
private LinearLayout llItemCal;
private onInteractionListener listener;
private Context ctx;

public CalendarItemViewHolder(View itemView, Context ctx){
    super(itemView);

    tvDescription = (TextView) itemView.findViewById(R.id.tvDescription);
    tvSubDescription = (TextView)itemView.findViewById(R.id.tvSubDescription);
    ivIcon = (RelativeLayout) itemView.findViewById(R.id.ivIcon);
    tvDate = (TextView) itemView.findViewById(R.id.tvDate);
    llItemCal = (LinearLayout) itemView.findViewById(R.id.llItemCal);
    this.ctx = ctx;
    listener = (onInteractionListener) ctx;

}

public void onBind(CalenderItem calenderItem, ExpandableGroup group){
    this.item = calenderItem;

    llItemCal.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
//MOVE TO DETAIL SCREEN
        }
    });

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
        tvDescription.setText(Html.fromHtml(calenderItem.getActivitie().getTitle(), Html.FROM_HTML_MODE_COMPACT));
    } else {
        tvDescription.setText(Html.fromHtml(calenderItem.getActivitie().getTitle()));
    }
//HERE IS A PROBLEM WHEN SCROLLING
    if(calenderItem.getCalType()== null || calenderItem.getCalType().equals("")){
        tvSubDescription.setVisibility(View.GONE);
    }else{
        tvSubDescription.setText(calenderItem.getCalType());
    }
  //HERE IS ALSO A PROBLEM WHEN SCROLLING 
    if (calenderItem.getDate() != null){
        tvDate.setText(calenderItem.getDate());
        tvDate.setVisibility(View.VISIBLE);
    }

 //HERE EVERYTHING SEEMS OKE
    Drawable background = ctx.getResources().getDrawable(R.drawable.circle);
    switch (item.getType()){
        case PROTHESE:
            background.setColorFilter(ContextCompat.getColor(ctx, R.color.blue_grey_200), PorterDuff.Mode.SRC_IN);
            ivIcon.setBackground(background);
            break;
        case NOTHING:
            background.setColorFilter(ContextCompat.getColor(ctx, R.color.blue_grey_400), PorterDuff.Mode.SRC_IN);
            ivIcon.setBackground(background);
            break;
        case DANGER:
            background.setColorFilter(ContextCompat.getColor(ctx, R.color.blue_grey_800), PorterDuff.Mode.SRC_IN);
            ivIcon.setBackground(background);
            break;
    }
}

public interface onInteractionListener {
    public void moveToDetailFragment(CalenderItem calItem);
}
}

Когда я прокручиваю, tvDate показывается случайным образомв моем списке

где мне нужно написать этот код для решения этой проблемы?

Ответы [ 2 ]

0 голосов
/ 27 ноября 2018

Должно быть так:

//HERE IS A PROBLEM WHEN SCROLLING
        if(calenderItem.getCalType()== null || calenderItem.getCalType().equals("")){
            tvSubDescription.setVisibility(View.GONE);
        }else{
            tvSubDescription.setText(calenderItem.getCalType());
            tvSubDescription.setVisibility(View.VISIBLE);
        }
      //HERE IS ALSO A PROBLEM WHEN SCROLLING 
        if (calenderItem.getDate() != null){
            tvDate.setText(calenderItem.getDate());
            tvDate.setVisibility(View.VISIBLE);
        } else {
    tvDate.setVisibility(View.GONE);
    }
0 голосов
/ 27 ноября 2018

Пожалуйста, попробуйте с кодом ниже.

//HERE IS ALSO A PROBLEM WHEN SCROLLING 
    if (calenderItem.getDate() != null){
        tvDate.setText(calenderItem.getDate());
        tvDate.setVisibility(View.VISIBLE);
    }else {
      tvDate.setVisibility(View.GONE);
    }
...