如何在没有动画的情况下更新 RecyclerView 项目?
How to update RecyclerView item without animation?
我有一个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());
}
}
试试这个
csRecyclerView.getItemAnimator().setChangeDuration(0);
recyclerView.getItemAnimator().setChangeDuration(0);
或者这个。
试试这个:
public ItemViewHolder(View view) {
super(view);
//do something
button.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
holder.itemView.setBackgroundColor(Color.parseColor("#000000"));
notifyDataSetChanged();
});;
}
}
试试这个
notifyItemChanged(position, Object);
这将在我们将对象传递到其中时更新位置而不对其进行动画处理。
试试这个并告诉我。
对于 Kotlin
你可以使用
notifyItemChanged(int position, @Nullable Object payload)
基于 ,在 Kotlin 1.2 中,以下代码工作正常:
notifyItemChanged(position, Unit)
有一种专门的方法可以禁用仅项目更改的动画:
((SimpleItemAnimator) myRecyclerView.getItemAnimator()).setSupportsChangeAnimations(false);
参考:https://developer.android.com/reference/androidx/recyclerview/widget/SimpleItemAnimator
在科特林中:recyclerView.itemAnimator = null
在 java 中:recyclerView.setItemAnimator(空);
开发者说:
空 return 值表示没有动画师,项目更改将在没有任何动画的情况下发生。
我有一个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());
}
}
试试这个
csRecyclerView.getItemAnimator().setChangeDuration(0);
recyclerView.getItemAnimator().setChangeDuration(0);
或者这个。
试试这个:
public ItemViewHolder(View view) {
super(view);
//do something
button.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
holder.itemView.setBackgroundColor(Color.parseColor("#000000"));
notifyDataSetChanged();
});;
}
}
试试这个
notifyItemChanged(position, Object);
这将在我们将对象传递到其中时更新位置而不对其进行动画处理。
试试这个并告诉我。
对于 Kotlin
你可以使用
notifyItemChanged(int position, @Nullable Object payload)
基于
notifyItemChanged(position, Unit)
有一种专门的方法可以禁用仅项目更改的动画:
((SimpleItemAnimator) myRecyclerView.getItemAnimator()).setSupportsChangeAnimations(false);
参考:https://developer.android.com/reference/androidx/recyclerview/widget/SimpleItemAnimator
在科特林中:recyclerView.itemAnimator = null
在 java 中:recyclerView.setItemAnimator(空);
开发者说: 空 return 值表示没有动画师,项目更改将在没有任何动画的情况下发生。