【问题标题】:How to update RecyclerView item without animation?如何在没有动画的情况下更新 RecyclerView 项目?
【发布时间】:2017-08-09 10:55:21
【问题描述】:

我有一个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);
  • @RakshitNawani 你的答案有效!
  • 乐于助人干杯!!
  • 有一个专门的方法可以禁用仅更改项目的动画: ((SimpleItemAnimator) myRecyclerView.getItemAnimator()).setSupportsChangeAnimations(false);参考:developer.android.com/reference/androidx/recyclerview/widget/…

标签: java android android-recyclerview android-animation


【解决方案1】:

试试这个

notifyItemChanged(position, Object);

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

试试这个,然后告诉我。

对于Kotlin,您可以使用

notifyItemChanged(int position, @Nullable Object payload)

【讨论】:

  • @Sam:乐于助人。干杯!!
  • 谢谢你,伙计!不知怎的不知道这么小的东西和有用的东西!
【解决方案2】:

基于Rakshit's answer,在Kotlin 1.2中,以下代码可以正常工作:

notifyItemChanged(position, Unit)

【讨论】:

    【解决方案3】:

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

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

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

    【讨论】:

      【解决方案4】:
      recyclerView.getItemAnimator().setChangeDuration(0);
      

      或者这个。

      【讨论】:

      • 我的RecyclerView 上没有看到getItemAnimator 方法
      • 请多加解释,而不是单行代码,没有帮助
      • getItemAnimator() 被添加到版本22.0.0 Android Developers
      【解决方案5】:

      在 kotlin 中:recyclerView.itemAnimator = null

      在java中:recyclerView.setItemAnimator(null);

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

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

      【讨论】:

        【解决方案6】:

        试试这个

        csRecyclerView.getItemAnimator().setChangeDuration(0);
        

        更多信息RecyclerView.ItemAnimator

        【讨论】:

        • 我的RecyclerView 上没有看到getItemAnimator。我认为它会关闭我猜的所有动画。
        【解决方案7】:

        试试这个:

            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();
        
                            });;
                        }
        }
        

        【讨论】:

        • 我认为这不会更新没有动画的项目。
        • 试试这个。如果你遇到任何问题,请告诉我,我会更新我的答案。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-03-08
        • 1970-01-01
        • 1970-01-01
        • 2015-03-20
        • 2016-04-16
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多