2012-08-31 10 views
5

私はいくつかのラベルとビューを動的に生成するアプリケーションを構築しています。 "カスタムビュー"がXMLレイアウトでどのように表示されるべきかを定義し、コードからこのレイアウトを膨らませました。Androidでビューをキャッシュする方法は?

膨らんだレイアウトは常に同じであるため、この手順を1回だけ行いたいと思います。 レイアウトができたら、キャッシュして、次に必要になるときに使用したいと思います。

問題は、私が膨大なレイアウトをキャッシュに入れて(例ではハッシュマップで)、それを親レイアウトに追加したときに、次回に再び追加しようとするときです(今回はキャッシュからレイアウトを取得します) )システムは、私のレイアウトには既に親があると言います。

子ビューを削除せずに親ビューから子ビューを切り離す方法はありますか?

は、いくつかのコードを追加しました:

private static HashMap<String, LinearLayout> mComponentsCache; 

// inflate and add the layout in cache 
layout = (LinearLayout)mLf.inflate(R.layout.form_textbox, mHolder, false); 
mComponentsCache.put(FormFieldType.TYPE_TEXT, layout); 
+0

レイアウトをどのように正確にキャッシングしているのですか?このようにレイアウトを行う理由は何ですか? – DroidBender

+2

私はこのようにしたいと思います。すでに膨張していたのと同じビューを再び膨らませることはないからです。一例として、レイアウトは同じで内容は異なる5つのテキストボックスを表示する必要があります。 –

答えて

9

あなたが実際にこれを行うことはできません。私はあなたがこのテキストボックスの5つのインスタンスを必要とするので、あなたがするたびに膨らませる必要があります

I want to do it in this way because is no point to re-inflate the same view which was already inflated. As an example I have to show 5 textboxes which have the same layout but different content.

あなたのコメントを引用しています。膨らませたくない場合は、すでに作成されているレイアウトをコピーする方法を見つける必要があります。これは、コピーが「コストがかかる」ために改善しません。

実際には、ビューを膨らませることは、XML解析(ちょうどそうそう思っている場合)を受けず、コンパイルされたコードであり、したがって、あなたのビューのコピーを作成する方法は無意味です。

ボトムライン:インフレに固執する。

+0

ありがとうございます。私はインフレーションに固執するでしょう:) –

+0

"実際には、ビューを膨らませることはXML解析(ちょうどそうそう思っている場合)を受けない、コンパイルされたコード" ....解決済み私が持っていたconfectionの... thnx :-) –

+0

これが当てはまる場合、リストビューの行のキャッシュはどのように機能しますか?ビューを再利用できるように思われますが、それはどのように機能しますか? – Justin

関連する問題