В моем приложении есть выдвижной ящик для уведомлений. Мне удалось заставить его работать как уведомления 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);
. Я использую этот метод и адаптер во всем своем приложении, и, как я уже сказал выше, он работает безупречно без анимации.