Вращающийся вид изображения принадлежит RecyclerView при нажатии - PullRequest
0 голосов
/ 01 мая 2020

ПРИМЕЧАНИЕ. Я решил проблему, когда писал вопрос, поэтому ответы не нужны. Все еще делюсь этим с ответом, так что кто-то, кто испытывает то же самое, может извлечь из этого пользу.

У меня есть представление переработчика, которое содержит изображение и 2 текстовых просмотра. Я хочу повернуть изображение при нажатии, но происходят некоторые странные вещи:

Иногда изображение не поворачивается. Иногда я вижу, что некоторые изображения повернуты, хотя я не нажимал на них.

Код для onClickListener:

arrow.setOnClickListener(new View.OnClickListener() {
      @Override
      public void onClick(View view) {
            showAnswer(getAdapterPosition(), arrow);
      }
});

Метод, который он вызывает:

private void showAnswer(int adapterPosition, ImageView arrow){
    Info info = infoList.get(adapterPosition);
    info.setExpanded(!info.isExpanded());
    if(!info.isExpanded()){
        arrow.setRotation(90);
    }
    else{
        arrow.setRotation(0);
    }
    notifyItemChanged(adapterPosition);
}

Обратите внимание, что я также одновременно изменяю видимость одного из моих текстовых представлений, что прекрасно работает.

1 Ответ

0 голосов
/ 01 мая 2020

Я поймал свою ошибку, когда писал часть вопроса «Я также изменяю видимость одного из моих текстовых представлений». Где я это менял? Не в onClickListener. Это было в методе onBindViewHolder. Поэтому удаление операторов if-else из onClick и добавление последней строки в следующем методе решило мою проблему:

@Override
public void onBindViewHolder(@NonNull RuleViewHolder holder, int position) {
    Info info = infoList.get(position);
    holder.questionTextView.setText(info.getQuestion());
    holder.answerTextView.setText(info.getAnswer());

    boolean isExpanded = infoList.get(position).isExpanded();
    holder.expandableLayout.setVisibility(isExpanded ? View.VISIBLE : View.GONE);
    holder.arrow.setRotation(isExpanded ? 90 : 0);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...