如何在没有动画的情况下更新 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.ItemAnimator

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 值表示没有动画师,项目更改将在没有任何动画的情况下发生。

https://developer.android.com/reference/android/support/v7/widget/RecyclerView.html#getItemAnimator()