私のアプリには、通知用のスライド ドロワーがあります。「すべてクリア」ボタンを含む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);
}
}
drawer_list.setAdapter(notificationAdapter);
問題点は、行が実行されるときの refreshNotifications() メソッドにあります。私はこのメソッドとアダプターをアプリ全体で使用していますが、上で述べたように、アニメーションがなくても問題なく動作します。