【问题标题】:How to use ItemAnimator in a RecyclerView?如何在 RecyclerView 中使用 ItemAnimator?
【发布时间】: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) 中的日志;但它没有来……我错过了什么……为什么它不起作用。

【问题讨论】:

    标签: android material-design android-recyclerview


    【解决方案1】:

    首先,您不需要自定义 ItemAnimator。可以使用默认的,去掉mRecyclerView.setItemAnimator(animator);

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

    【讨论】:

    • 如何创建自定义ItemAnimator?
    • @KishanVaghela 你应该扩展 DefaultItemAnimator 类!
    猜你喜欢
    • 1970-01-01
    • 2014-09-02
    • 2016-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-17
    • 1970-01-01
    • 2021-07-26
    相关资源
    最近更新 更多