2015-04-23 12 views
16

Chcę zrobić animację, gdy element zostanie dodany lub usunięty z adaptera recyclerview. I'am próbuje użyć RecyclerView.ItemAnimator następująco ale to nie działa ..Jak używać ItemAnimator w widoku 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 stosując powyższy kod w następujący sposób.

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

} 

Ilekroć dodać nowy element do zestawu danych i wywołać mAdapter.notifyDataSetChanged() spodziewałem teraźniejszość Log w animateAdd(ViewHolder arg0) Obecnie w klasie MyAnimator; ale to nie nadchodzi .. ja brakuje czegoś ... Dlaczego nie działa.

Odpowiedz

22

Po pierwsze, nie potrzebujesz do tego niestandardowego ItemAnimatora. Można użyć domyślny, usuń mRecyclerView.setItemAnimator(animator);

Również trzeba użyć notifyItemInserted() i notifyItemRemoved() zamiast notifyDataSetChanged(), wywołuje właściwą animację dla Ciebie.

+0

jak stworzyć niestandardowy ItemAnimator? –

+3

Możesz sprawdzić ten projekt: https://github.com/wasabeef/recyclerview-animators – kralex

+0

@KishanVaghela Powinieneś rozszerzyć klasę DefaultItemAnimator! – Rafa0809

Powiązane problemy