@Override
public void onBindChildViewHolder(@NonNull final MyChildViewHodler childViewHolder, final int parentPosition, final int childPosition, @NonNull final Course child) {
childViewHolder.childProgress.setTextColor(context.getResources().getColor(R.color.lerning_child));
childViewHolder.childProgress.setVisibility(View.VISIBLE);
childViewHolder.imgCertification.setVisibility(View.GONE);
Log.e("MyLerningFragmentAdapter=CREATE", parentPosition + " " + childPosition + "");
if (parentPosition!=0){
childViewHolder.rippleLayout.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.e("MyLerningFragmentAdapter=CLICK", parentPosition + " " + childPosition + "");
}
});
}
Судя по всему я не так добавляю Listener. Как быть тогда?
Куда его добавить нужно чтобы заработало. Такая же проблема у меня была с ListView. Вот еще видео прикладываю. Чтобы было понятнее
Видео с ошибкой
RecyclerView использует созданные ViewHolder'ы повторно, для того, чтобы не создавать множество новых объектов при пролистывании длинного списка. При прокрутке списка, когда на экране появляется новый элемент, адаптер берёт один из использованных ViewHolderов, которые ушли с экрана, и заполняет его новыми данными.
Т.к. у вас есть проверка
if (parentPosition != 0)
, при пролистывании наверх, когда на экране появляются элементы 0-го родителя, новый OnClickListener не устанавливается, а остаётся тем же самым, который был при создании ViewHolder'а, который используется для показа этого нового элемента.
UPDATE. Ответ на комментарий.
Можно например так:
@Override
public void onBindChildViewHolder(
@NonNull final MyChildViewHodler childViewHolder,
final int parentPosition,
final int childPosition,
@NonNull final Course child
) {
int colorResId;
switch (parentPosition) {
case 4:
colorResId = context.getResources().getColor(R.color.lerning_child_red);
break;
default:
colorResId = context.getResources().getColor(R.color.lerning_child);
break;
}
childViewHolder.childProgress.setTextColor(colorResId);
...
}
Но лучше конечно не завязываться именно на номер, а использовать дополнительное поле в классе Parent, которое для 4 имело бы одно значение, а для всех остальные другое. И тогда использовать что-то типа:
Parent parent = getParent(parentPosition);
int colorResId = context.getResources().getColor(parent.getColorFlag()
? R.color.lerning_child_red
: R.color.lerning_child);
Видео посмотреть не могу. Попробуйте вот так
childViewHolder.rippleLayout.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (parentPosition == 0)
return;
Log.e("MyLerningFragmentAdapter=CLICK", parentPosition + " " + childPosition + "");
}
});
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости