如何在没有动画的情况下更新RecyclerView项目?

问题描述 投票:0回答:6

我有一个

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());
        }
    }
java android android-recyclerview android-animation
6个回答
35
投票

试试这个

notifyItemChanged(position, Object);

当我们在其中传递对象时,这将更新位置而不对其进行动画处理。

尝试一下并告诉我。

对于

Kotlin
,您可以使用

notifyItemChanged(int position, Unit payload)

13
投票

基于 Rakshit 的回答,在 Kotlin 1.2 中,以下代码工作正常:

notifyItemChanged(position, Unit)

11
投票

有一种专用方法可以禁用仅项目更改的动画:

((SimpleItemAnimator) myRecyclerView.getItemAnimator()).setSupportsChangeAnimations(false);

参考:https://developer.android.com/reference/androidx/recyclerview/widget/SimpleItemAnimator


6
投票

在 kotlin 中:recyclerView.itemAnimator = null

在java中:recyclerView.setItemAnimator(null);

开发商说: null 返回值表示没有动画师,并且项目更改将在没有任何动画的情况下发生。

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


4
投票
recyclerView.getItemAnimator().setChangeDuration(0);

或者这个。


2
投票

试试这个

csRecyclerView.getItemAnimator().setChangeDuration(0);

了解更多信息RecyclerView.ItemAnimator

© www.soinside.com 2019 - 2024. All rights reserved.