注:我在写问题的时候解决了这个问题,所以不需要回答。还是把这个问题和答案一起分享,让有同样经历的人能够从中受益。
我有一个回收器视图,其中包含图像和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);
}
请注意,我也同时改变了我的一个文本视图的可见性,效果非常好。
我在写问题的 "我也改变了我的一个textViews的可见性 "部分的时候发现了自己的错误。我是在哪里改的呢?不是在onClickListener里,而是在onBindView里。而是在onBindViewHolder方法中。因此,从onClick中删除if-else语句,并在下面的方法中添加最后一行,就解决了我的问题。
@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);
}