单击时旋转图像视图属于 RecyclerView
Rotating image view belongs to a RecyclerView on click
注意:我在写问题时解决了问题,因此不需要答案。仍然与答案分享这个,以便有同样经历的人可以从中受益。
我有一个包含图像和 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);
}
请注意,我还同时更改了其中一个 textView 的可见性,效果非常好。
我在写问题的 "I also change the visibility of one of my textViews" 部分时犯了错误。我在哪里更改它?不在 onClickListener 中。它在 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);
}
注意:我在写问题时解决了问题,因此不需要答案。仍然与答案分享这个,以便有同样经历的人可以从中受益。
我有一个包含图像和 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);
}
请注意,我还同时更改了其中一个 textView 的可见性,效果非常好。
我在写问题的 "I also change the visibility of one of my textViews" 部分时犯了错误。我在哪里更改它?不在 onClickListener 中。它在 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);
}