Триггер события Multiples (onClick) внутри представления ресайклера

У меня есть 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());
   }

}
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
0
200
1

Ответы 1

Вместо этого переместите 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
                  }
              });
     }
}

}

Я попытался с другим действием, и результат тот же: код действия gist.github.com/aneury1/667b936b53fd50c6b78c4f4ca4d43de4

Aneury Perez 13.03.2019 22:14

@AneuryPerez В вашем коде отсутствует 1 важный метод getItemId(). Если вы не добавите этот метод, это вызовет повторение. Я обновил свой ответ. пожалуйста, проверьте

Deepak kaku 13.03.2019 23:07

Я уже реализовал переопределение этой функции с тем же результатом, но, наконец, я понимаю, что моя ошибка заключалась в том, что я не понимал, что RecyclerView перерабатывает каждый держатель, когда это необходимо, и чтобы избавиться от этой ошибки, я использовал идею itemId, но в другом классе Я взял новый класс в качестве модели, которая содержит значение для каждой записи в моем списке, я установил значение обновления каждого держателя в onbindviewholder в моем адаптере, возможно, это не лучший вариант, но в этом случае он работает нормально. если у вас есть другой вариант, я попробую.

Aneury Perez 14.03.2019 14:39

Другие вопросы по теме