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 の最初の項目の下に "トランスポート" します)。私が言いたいことを理解できるように、3 つのスクリーンショットを添付します。

ここに画像の説明を入力 ここに画像の説明を入力 ここに画像の説明を入力

また、ビュー自体を削除する直前にアニメーションを停止しようとしました。すると、また面白いことが起こります。すべてのビューのアニメーションは停止していますが、最初のアイテムの下にあるビューはまだ表示されています (また、まだアニメーション化されています!)。

その景色がどこから来ているのか、私にはわかりません。アイデアはありますか?

4

1 に答える 1

1

アニメーションなしで削除しようとしましたか? アニメは問題ないと思います。オブジェクトを削除した後、アダプターをビューに再ロードしてみてください。電話するだけ

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

試してみる。グリーズ

于 2013-09-27T08:15:14.383 に答える