У меня есть recyclerView с множественным представлением, я уже правильно установил все разные держатели просмотра, а некоторые просмотрщики представлены одной и той же ViewGroup, внутри группы просмотра у меня есть кнопка, когда эта кнопка нажимается, она меняет значение в textView, пока все работает хорошо, проблема заключается в том, что когда я запускаю событие, некоторые из всех групп просмотра в списке одной и той же группы просмотра изменяются, когда я нажимаю одну кнопку не по порядку конкретно внутри списка, а постоянно в экземпляре, я уже установил некоторую точку останова, но что-то вне нормальный, есть идеи, почему что-то подобное происходит?
мой ViewHolder Hirechary выглядит так.
public abstract class AbstractViewHolderR extends RecyclerView.ViewHolder{
public Button btn;
public TextView view;
...
}
public class ChildVH1 extends AbstractViewHolderR{
...
}
...other ViewHolder look the same.
/// the event listener look like this.
public class Click implement View.OnClickListener{
AbstractViewHolderR object;
public Click(AbstractViewHolderR o){
object = o;
}
@Override
public void onClick(View v){
////error checking omited
Integer ii = Integer.Parse(object.view.getText().toString);
ii++;
object.view.setText(ii.ToString());
}
}




Вместо этого переместите TextView и Btn в держатель View, и вы должны добавить прослушиватель кликов в сам ViewHolder, как это
public abstract class AbstractViewHolderR extends RecyclerView.ViewHolder{
//UPDATE
@Override
public long getItemId(int position) {
return position;
}
...
}
public class ChildVH1 extends RecyclerView.ViewHolder{
public Button btn;
public TextView view;
public ChildVH1(View itemView){
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//do your stuff
//you can use getAdapterPosition() to get current
//position in adapter
}
});
}
}
}
@AneuryPerez В вашем коде отсутствует 1 важный метод getItemId(). Если вы не добавите этот метод, это вызовет повторение. Я обновил свой ответ. пожалуйста, проверьте
Я уже реализовал переопределение этой функции с тем же результатом, но, наконец, я понимаю, что моя ошибка заключалась в том, что я не понимал, что RecyclerView перерабатывает каждый держатель, когда это необходимо, и чтобы избавиться от этой ошибки, я использовал идею itemId, но в другом классе Я взял новый класс в качестве модели, которая содержит значение для каждой записи в моем списке, я установил значение обновления каждого держателя в onbindviewholder в моем адаптере, возможно, это не лучший вариант, но в этом случае он работает нормально. если у вас есть другой вариант, я попробую.
Я попытался с другим действием, и результат тот же: код действия gist.github.com/aneury1/667b936b53fd50c6b78c4f4ca4d43de4