5

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

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

它在 Jellybean 版本上运行良好,但在 Api < 16 上没有任何作用。有没有办法让它工作或者对于 pre Jellybean 有不同的方法?


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

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

3 回答 3

4

For pre Jellybean, I think you can just use setRecyclerListener on ListView and when RecyclerListener#onMovedToScrapHeap(View view) is called, clear the animation on the view who has been recycled and directly do the final job which was supposed to be done when animation ends.

The code inside onMovedToScrapHeap(View view) depends on how you implement the animation, e.g. you can call View#clearAnimation() if you previously used View#startAnimation to start animation.

于 2013-05-25T18:04:40.860 回答
3

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

于 2014-06-26T04:43:43.790 回答
1

除了 Daniel 谈到的动画问题之外,另一个知道视图何时被回收的问题与内存管理有关。如果您在列表项中放置大型、内存密集型位图,那么您可能不希望您的视图被回收,如果它不太可能被其他项目重新使用。这个钩子让你有机会清除你可能已经分配给 ImageView 的位图。希望这是一个罕见的问题。

于 2013-07-23T14:23:15.453 回答