Обновление ListView после анимации

В моем приложении есть выдвижной ящик для уведомлений. Мне удалось заставить его работать как уведомления Android, включая кнопку «очистить все».

Когда нажимается кнопка «Очистить все», моя база данных очищается, мой адаптер списка обновляется, и мой адаптер списка устанавливается в список. Вид обновляется, и список очищается.

Когда я добавил выдвижную анимацию (как и желейные бобы), я получил исключение NullPointerException. Проблема возникает, когда мой адаптер установлен. Если я закомментирую настройку адаптера, анимация запустится без проблем.

            // Animation
        int count = drawer_list.getCount();
        for (int i = 0; i < count; i++) {
            View view = drawer_list.getChildAt(i);
            if (view != null) {
                // create an Animation for each item
                Animation animation = AnimationUtils.loadAnimation(this, android.R.anim.slide_out_right);
                animation.setDuration(300);

                // ensure animation final state is "persistent"
                animation.setFillAfter(true);

                // calculate offset (bottom ones first, like in notification panel)
                animation.setStartOffset(300 * (count - 1 - i));

                // animation listener to execute action code
                if (i == 0) {
                    animation.setAnimationListener(new AnimationListener() {

                        public void onAnimationStart(Animation animation) {
                            // NOT USED

                        }

                        public void onAnimationRepeat(Animation animation) {
                            // NOT USED

                        }

                        public void onAnimationEnd(Animation animation) {

                            // Clear table
                            notifications.flushNotificationTempTable_ActiveOnly();
                            // Update list adapter
                            refreshNotifications();
                            // Close drawer
                            notification_drawer.close();
                        }
                    });
                }

                view.startAnimation(animation);
            }
        }

Проблема заключается в методе refreshNotifications(), когда выполняется строка drawer_list.setAdapter(notificationAdapter);. Я использую этот метод и адаптер во всем своем приложении, и, как я уже сказал выше, он работает безупречно без анимации.


person lttwinkie    schedule 24.02.2013    source источник


Ответы (1)


Я смог решить эту проблему, удалив прослушиватель анимации и добавив после него отложенный запуск, который запускал мой код пост-анимации.

Мне не удалось найти способ установить новый адаптер (необходимый, потому что я использовал собственный адаптер) внутри прослушивателя анимации. Если кто-нибудь знает, как это сделать, я хотел бы знать.

person lttwinkie    schedule 26.02.2013