Intereting Posts
Можем ли мы программно включить / отключить отладку USB на устройствах Android? Конфликт контент-провайдеров facebook SDK Как управлять соединением Bluetooth на Android через изменения конфигурации? Что мне следует добавить в атрибут contentDescription для декоративных изображений, таких как разделитель полей? API Android V2 и API для Google Maps RelativeLayout в вычислении ширины StackLayout Как разрешить ADB-устройство не авторизовано на хост-устройстве Android ADB? Как предотвратить восстановление фрагментов при выборе из NavigationDrawer? Android: AccountPicker установлен Light Theme Как я могу использовать библиотеку модернизации с помощью progressbar? Android Facebook Login "LoginActivity не может быть запущен" RxAndroid, шина событий и жизненный цикл активности Android listview, перейти к действию Как создать тост в телефонном разговоре? Связывание с предварительно построенными библиотеками с помощью NDK с использованием gradle

Как использовать ItemAnimator в 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 } } 

Я использую следующий код следующим образом.

 @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() я ожидал, что Log присутствует в animateAdd(ViewHolder arg0) присутствующем в классе MyAnimator; Но это не придет. Я что-то пропустил. Почему он не работает.

Solutions Collecting From Web of "Как использовать ItemAnimator в RecyclerView?"

Прежде всего, для этого вам не нужен специальный ItemAnimator. Вы можете использовать по умолчанию один, удалить mRecyclerView.setItemAnimator(animator);

Кроме того, вы должны использовать notifyItemInserted() и notifyItemRemoved() вместо notifyDataSetChanged() , он вызывает соответствующую анимацию для вас.