我有一个
RecyclerView
。当我单击 RecyclerView
中某个项目内的按钮时,我想更改该项目中 View
的颜色。以下是我的代码并且运行良好。但是,问题是该项目会有一个很难看的动画。我想更新没有动画的项目。我该怎么做呢?顺便说一句,我不想关闭动画,只是为了这个点击事件。
public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
public ImageView imageView;
public Button button;
public ItemViewHolder(View view) {
super(view);
//do something
button.setOnClickListener(this);
}
@Override
public void onClick(View view) {
//change color
notifyItemChanged(getAdapterPosition());
}
}
试试这个
notifyItemChanged(position, Object);
当我们在其中传递对象时,这将更新位置而不对其进行动画处理。
尝试一下并告诉我。
对于
Kotlin
,您可以使用
notifyItemChanged(int position, Unit payload)
基于 Rakshit 的回答,在 Kotlin 1.2 中,以下代码工作正常:
notifyItemChanged(position, Unit)
有一种专用方法可以禁用仅项目更改的动画:
((SimpleItemAnimator) myRecyclerView.getItemAnimator()).setSupportsChangeAnimations(false);
参考:https://developer.android.com/reference/androidx/recyclerview/widget/SimpleItemAnimator
在 kotlin 中:recyclerView.itemAnimator = null
在java中:recyclerView.setItemAnimator(null);
开发商说: null 返回值表示没有动画师,并且项目更改将在没有任何动画的情况下发生。
recyclerView.getItemAnimator().setChangeDuration(0);
或者这个。