如何在RecyclerView中使用ItemAnimator?

Har*_*h_N 19 android material-design android-recyclerview

我想在从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

    }

}
Run Code Online (Sandbox Code Playgroud)

我使用上面的代码如下.

@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); 

}
Run Code Online (Sandbox Code Playgroud)

每当我在数据集中添加一个新项目并调用mAdapter.notifyDataSetChanged()i时,我希望animateAdd(ViewHolder arg0)MyAnimator类中存在Log; 但它没有来......我错过了什么..为什么它不起作用.

kra*_*lex 26

首先,您不需要自定义ItemAnimator.您可以使用默认值,删除mRecyclerView.setItemAnimator(animator);

此外,您必须使用notifyItemInserted()notifyItemRemoved()不是notifyDataSetChanged(),它会为您调用适当的动画.

  • 您可以查看此项目:https://github.com/wasabeef/recyclerview-animators (4认同)