2015-04-23 15 views
16

Voglio fare animazione quando un articolo viene aggiunto o rimosso dall'adattatore di recyclerview. I'am cercando di utilizzare RecyclerView.ItemAnimator come segue, ma non funziona ..Come utilizzare ItemAnimator in RecyclerView?

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 

    } 

} 

I'am usando sopra codice come segue.

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

} 

Ogni volta che aggiungere una nuova voce nel set di dati e chiamo mAdapter.notifyDataSetChanged() mi aspettavo il registro presente in animateAdd(ViewHolder arg0) presente in classe MyAnimator; ma non sta arrivando..am mi manca qualcosa..Perché non funziona.

risposta

22

Prima di tutto, per questo non è necessario un ItemAnimator personalizzato. È possibile utilizzare uno di default, rimuovere mRecyclerView.setItemAnimator(animator);

Inoltre, è necessario utilizzare notifyItemInserted() e notifyItemRemoved() invece di notifyDataSetChanged(), invoca una corretta animazione per voi.

+0

come creare Custom ItemAnimator? –

+3

Puoi controllare questo progetto: https://github.com/wasabeef/recyclerview-animators – kralex

+0

@KishanVaghela Dovresti estendere la classe DefaultItemAnimator! – Rafa0809

Problemi correlati