Je veux faire de l'animation lorsqu'un élément est ajouté ou supprimé de l'adaptateur de recyclerview. J'essaie d'utiliser RecyclerView.ItemAnimator comme suit mais cela ne fonctionne pas ..
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
}
}
J'utilise le code ci-dessus comme suit.
@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);
}
Chaque fois que j'ajoute un nouvel élément dans l'ensemble de données et appelle mAdapter.notifyDataSetChanged()
je m'attendais à ce que le journal soit présent dans animateAdd(ViewHolder arg0)
présent dans la classe MyAnimator; mais ça ne vient pas..suis-je manque quelque chose..Pourquoi ça ne fonctionne pas.
Tout d'abord, vous n'avez pas besoin d'ItemAnimator personnalisé pour cela. Vous pouvez utiliser celui par défaut, supprimer mRecyclerView.setItemAnimator(animator);
De plus, vous devez utiliser notifyItemInserted()
et notifyItemRemoved()
au lieu de notifyDataSetChanged()
, cela appelle une animation appropriée pour vous.