[英]How to update/refresh a specific item of RecyclerView without calling notifiyItemChanged or DiffUtil?
[英]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());
}
}
試試這個
notifyItemChanged(position, Object);
當我們在其中傳遞對象時,這將更新位置而不對其進行動畫處理。
試試這個,讓我知道。
對於Kotlin
您可以使用
notifyItemChanged(int position, @Nullable Object payload)
根據Rakshit 的回答,在Kotlin 1.2 中,以下代碼可以正常工作:
notifyItemChanged(position, Unit)
recyclerView.getItemAnimator().setChangeDuration(0);
或者這個。
有一種專門的方法可以禁用僅更改項目的動畫:
((SimpleItemAnimator) myRecyclerView.getItemAnimator()).setSupportsChangeAnimations(false);
參考: https : //developer.android.com/reference/androidx/recyclerview/widget/SimpleItemAnimator
在 kotlin 中:recyclerView.itemAnimator = null
在 Java 中:recyclerView.setItemAnimator(null);
開發人員說:一個空返回值表示沒有動畫師,項目更改將在沒有任何動畫的情況下發生。
試試這個:
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();
});;
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.