删除项目并调用notifyDataSetChanged()后,GridView项目神奇地出现在第一个项目下

时间:2013-09-17 00:32:11

标签: android animation gridview

我有一个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的第一项)。我附上三个截图,以便你可以看到我的意思:

enter image description here enter image description here enter image description here

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

我不知道该视图的来源。任何人的想法?

1 个答案:

答案 0 :(得分:1)

您是否尝试在没有动画的情况下删除它?我不认为动画是问题所在。删除对象后,尝试将适配器重新加载到View。只需致电

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

试一试。 Greez