2012-01-23 17 views
0

リストが表示され、スクロールされると、ListAdapter.getView()は新しいリストアイテムビューを作成するか、または新しいコンテンツを表示するためにそれに渡された既存のビューを(convertViewとして)再調整します。ListAdapterからキャッシュされたビューを取得する

getView()によって作成されたすべてのビューを取得する方法がある場合は、たとえば、リストアイテムビューでアクティビティが破棄されたときにリソースを解放する必要がある場合は、すべてのリストアイテムビューそして、リソースを解放するためにそれらを教えて

答えて

4

まあ、それはListView#getChildAt(int)を使用してListViewを反復処理などとして単純ではないとAbsListViewが再利用されますView Sを保持するために使用RecycleBin実装しています。 View

RecycleBinに配置され、その従ってアクセスできないそれをレンダリングgetChildAt(int)を使用して、ViewGroup#detachViewFromParent(View)を使用して、その親(リストビュー)から取り外します。

実装する必要があるのは、インターフェイスで、ViewRecycleBinに移動したときに通知されます。

0

ListViewViewGroupあるので、あなたがこのような子ビューに反復することができる必要があります:。

for (int i=0; i < myListView.getChildCount(); i++) { 
    View v = myListView.getChildAt(i); 

    //Check to see if this view has the resource, then release it 
} 

似た何かがこの質問で必要とされた:Android: Access child views from a ListView

+1

しかし、それは私に現在表示されているビューのみを表示し、一部のビューはキャッシュされているが表示されないことがあります。 – SVD

+0

あなたはそれについて正しいです。 RecyclerListenerを実装するというJensの答えが良い答えです。私はそのようなことは存在していなかったが、それはあなたが必要とするものでなければならない。 –

0

それはjavaのです。リソースを解放するために、アプリケーションまたはインスタンスを実際に破棄するように指示することはできません。 finalize()を使用すると、Javaマシンが実行する確率を上げることしかできません。 ListViewAbsListViewサブクラスです - -

+0

私は物事を瞬時に破壊する方法を探していませんが、リソースへの参照を解放する方法については、もはや必要ではないと確信しています(つまり、アクティビティのonDestroyが呼び出されたとき)。 – SVD

+0

2つの亜種の違いは何ですか:1. AはBを放出し、BはCを放出することができる。2. BはCを放出することができるか? ----あなたは1階建ての建物を少なくしますが、それを消すことはできません。あなたがしたいことはAndroidではサポートされていないと、ここの多くの指導者による。 – Gangnus

0

アダプターがこのアクティビティの外で使用されている場合を除き、このアダプターへの唯一の参照はアクティビティー内にあります。つまり、アクティビティがガベージコレクションされている場合、アダプタはガベージコレクションされます。つまり、ビューが収集されます。私はあなたがこの振る舞いで測定可能な問題を持っていない限り、これを最適化しようとすることを心配しません。

関連する問題