Java ListView:防止视图被回收

Java ListView:防止视图被回收,java,android,android-listview,android-animation,android-support-library,Java,Android,Android Listview,Android Animation,Android Support Library,我有一个使用循环视图的列表视图。我试图阻止视图被回收。 所以我使用setHasTransientState: android.support.v4.view.ViewCompatJB.setHasTransientState(视图视图,布尔hasTransientState) 它在Jellybean版本上运行得非常好,但在Api

我有一个使用循环视图的列表视图。我试图阻止视图被回收。 所以我使用setHasTransientState:

android.support.v4.view.ViewCompatJB.setHasTransientState(视图视图,布尔hasTransientState)

它在Jellybean版本上运行得非常好,但在Api<16的版本上却没有任何功能。 有没有一种方法可以让它发挥作用,或者对于pre Jellybean有不同的方法


我发现了如何设置一个回收列表,如@Daniel Chow建议的那样

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

对于pre-Jellybean,我认为您可以在ListView上使用setRecyclerListener,当调用RecyclerListener#onMovedToScrapHeap(视图视图)时,清除视图上已回收的动画,并直接执行动画结束时应完成的最后一项工作


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

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

使用android.support.v4.view.ViewCompat.setHasTransientState(视图视图,布尔hasTransientState)而不是android.support.v4.view.ViewCompatJB.setHasTransientState(视图视图,布尔hasTransientState)

为什么要阻止循环视图?我想给视图设置动画。你可以在这里看到它是如何工作的。你是否使用了支持库函数:,布尔值)你可以写一些代码来说明如何实现RecyclerListener#onMovedtoscrapeap(View-View)@vovahost在Android中启动动画有很多方法,因此RecyclerListener#onMovedtoscrapeap(View-View)中的代码取决于。如果使用ViewPropertyAnimator,则可以调用ViewPropertyAnimator#cancel();如果使用View#startAnimation启动动画,则应调用View#clearAnimation()停止动画。传递给RecyclerListener#onMovedToScrapHeap(视图视图视图)的视图实际上与Adapter#getView()中的convertView相同,因此您也可以使用findViewById或ViewHolder查找子视图并对其进行操作。难道不可能在getView上停止动画(如果存在)吗,不必回收的视图会发生什么变化?它最终会进入废视图池吗?