ListView:防止回收视图

时间:2013-05-25 16:43:00

标签: java android android-listview android-animation android-support-library

我有一个使用回收视图的ListView。我试图阻止视图回收。 所以我使用setHasTransientState:

  

android.support.v4.view.ViewCompatJB.setHasTransientState(View view,boolean hasTransientState)

它在Jellybean版本上运行得非常好,但它对Api< 16。 有没有办法让它起作用,或者对于前豆科植物有不同的方法?


我发现了如何设置像 @Daniel Chow 建议的RecyclerListener。

listView.setRecyclerListener(new RecyclerListener() {
        @Override
        public void onMovedToScrapHeap(View view) {
            // Stop animation on this view
        }
});

3 个答案:

答案 0 :(得分:4)

对于pre Jellybean,我认为你可以在ListView上使用setRecyclerListener,当调用RecyclerListener#onMovedToScrapHeap(View view)时,清除已被回收的视图上的动画并直接执行应该完成的最终作业当动画结束时。

onMovedToScrapHeap(视图视图)中的代码取决于您实现动画的方式,例如:如果您以前使用View#startAnimation来启动动画,则可以调用View#clearAnimation()。

答案 1 :(得分:3)

使用android.support.v4.view.ViewCompat.setHasTransientState(View view,boolean hasTransientState)而不是android.support.v4.view.ViewCompatJB.setHasTransientState(View view,boolean hasTransientState)

答案 2 :(得分:1)

除了Daniel谈到的动画问题之外,另一个知道何时回收视图的问题与内存管理有关。如果您在列表项中放置大量内存密集型位图,则可能不希望您的视图在其他项目不可能重复使用时进行回收。此挂钩使您有机会清除可能已分配给ImageView的位图。希望这是一个罕见的问题。