0

我有一个 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 的第一项)。我附上三个屏幕截图,以便您了解我的意思:

在此处输入图像描述 在此处输入图像描述 在此处输入图像描述

我还尝试在删除视图本身之前停止动画。然后,另一件有趣的事情发生了。所有视图的动画都停止了,但第一项下方的视图仍然出现(并且它仍然是动画的!)。

我不知道这种观点是从哪里来的。有什么想法吗?

4

1 回答 1

1

您是否尝试在没有动画的情况下将其删除?我不认为动画是问题。删除对象后尝试将适配器重新加载到视图。打电话

gridView.invalidateViews();
photosAdapter = new PhotosAdapter(this,
            R.layout.grid_item, listOfPhotos);
gridView.setAdapter(photosAdapterAdapter);

试试看。格力兹

于 2013-09-27T08:15:14.383 回答