我有一个 GridView,在它的适配器内部,我在 getView 方法中有以下代码:
if(deleteState){
Animation deleteAnimation = AnimationUtils.loadAnimation(ThisApplication.getContext(), R.anim.delete_animation);
holder.root.startAnimation(deleteAnimation);
}else{
holder.root.clearAnimation();
}
R.anim.delete_animation 是一个类似于 iOS 的动画,它可以摇动项目:
<!-- Based on: http://stackoverflow.com/a/9449590/1369016 -->
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="200"
android:fromDegrees="-4"
android:pivotX="50%"
android:pivotY="50%"
android:repeatCount="infinite"
android:repeatMode="reverse"
android:toDegrees="4" />
到目前为止一切都很好。当我从列表中删除一个项目时,问题就来了。从适配器的列表中删除项目后,我调用 notifyDataSetChanged(),如下所示:
public void deletePhotoFromAdapter(final int position){
listOfPhotos.remove(position);
notifyDataSetChanged();
}
当我这样做时,该项目被删除,但不知何故,我删除的项目的视图位于 GridView本身的第一个项目视图之下!就像动画使视图保持活动状态(但以某种方式“传输”该视图以低于 GridView 的第一项)。我附上三个屏幕截图,以便您了解我的意思:
我还尝试在删除视图本身之前停止动画。然后,另一件有趣的事情发生了。所有视图的动画都停止了,但第一项下方的视图仍然出现(并且它仍然是动画的!)。
我不知道这种观点是从哪里来的。有什么想法吗?