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

时间:2017-08-09 10:55:21

标签: java android android-recyclerview android-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());
        }
    }

7 个答案:

答案 0 :(得分:12)

试试这个

notifyItemChanged(position, Object);

这将更新位置而不动画它,因为我们正在传递它的对象。

试试这个并告诉我。

答案 1 :(得分:3)

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

notifyItemChanged(position, Unit)

答案 2 :(得分:1)

recyclerView.getItemAnimator().setChangeDuration(0);

或者这个。

答案 3 :(得分:1)

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

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

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

答案 4 :(得分:0)

试试这个

csRecyclerView.getItemAnimator().setChangeDuration(0);

了解更多信息RecyclerView.ItemAnimator

答案 5 :(得分: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();

                    });;
                }
}

答案 6 :(得分:0)

在 kotlin 中:recyclerView.itemAnimator = null

在java中:recyclerView.setItemAnimator(null);

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

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