如何在 RecyclerView 中使用 ItemAnimator?
Posted
技术标签:
【中文标题】如何在 RecyclerView 中使用 ItemAnimator?【英文标题】:How to use ItemAnimator in a RecyclerView? 【发布时间】:2015-07-02 02:08:51 【问题描述】:我想在 recyclerview 的适配器中添加或删除项目时做动画。我正在尝试按如下方式使用 RecyclerView.ItemAnimator 但它不起作用..
public class MyAnimator extends RecyclerView.ItemAnimator
@Override
public boolean animateAdd(ViewHolder arg0)
Log.d("test","Added Animation");
return false;
@Override
public boolean animateChange(ViewHolder arg0, ViewHolder arg1, int arg2, int arg3, int arg4, int arg5)
Log.d("test","Change Animation");
return false;
@Override
public boolean animateMove(ViewHolder arg0, int arg1, int arg2, int arg3, int arg4)
// TODO Auto-generated method stub
return false;
@Override
public boolean animateRemove(ViewHolder arg0)
Log.d("test", "Remove Animation");
return false;
@Override
public void endAnimation(ViewHolder arg0)
// TODO Auto-generated method stub
@Override
public void endAnimations()
// TODO Auto-generated method stub
@Override
public boolean isRunning()
// TODO Auto-generated method stub
return false;
@Override
public void runPendingAnimations()
// TODO Auto-generated method stub
我使用上面的代码如下。
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mRecyclerView = (RecyclerView) findViewById(R.id.my_recycler_view);
data=new ArrayList<String>();
// use a linear layout manager
mLayoutManager = new LinearLayoutManager(this);
mRecyclerView.setLayoutManager(mLayoutManager);
animator = new MyAnimator();
mRecyclerView.setItemAnimator(animator);
mAdapter = new MyAdapter(data);
mRecyclerView.setAdapter(mAdapter);
每当我将新项目添加到数据集中并调用 mAdapter.notifyDataSetChanged()
时,我都希望在 MyAnimator 类中出现 animateAdd(ViewHolder arg0)
中的日志;但它没有来……我错过了什么……为什么它不起作用。
【问题讨论】:
【参考方案1】:首先,您不需要自定义 ItemAnimator。可以使用默认的,去掉mRecyclerView.setItemAnimator(animator);
另外,您必须使用notifyItemInserted()
和notifyItemRemoved()
而不是notifyDataSetChanged()
,它会为您调用适当的动画。
【讨论】:
如何创建自定义ItemAnimator? @KishanVaghela 你应该扩展 DefaultItemAnimator 类!以上是关于如何在 RecyclerView 中使用 ItemAnimator?的主要内容,如果未能解决你的问题,请参考以下文章