2012-08-31 22 views
5

Ich baue eine App, die dynamisch einige Beschriftungen und Ansichten generiert. Ich habe definiert, wie meine "benutzerdefinierte Ansicht" in einem XML-Layout aussehen sollte und aus dem Code I dieses Layout aufblasen.Wie werden Ansichten in Android zwischengespeichert?

Da das aufgeblähte Layout immer gleich ist, möchte ich diesen Schritt nur einmal machen. Nachdem ich das Layout habe, möchte ich es zwischenspeichern und es beim nächsten Mal verwenden, wenn ich es brauche.

Das Problem ist, dass, wenn ich mein überhöhtes Layout im Cache (in einer Hashmap mit Beispiel) und fügen Sie es zu einem übergeordneten Layout, das nächste Mal, wenn ich es erneut hinzufügen (dieses Mal bekomme ich das Layout aus dem Cache) Das System sagt, dass mein Layout bereits einen Elternteil hat.

Kennen Sie eine Methode, um eine untergeordnete Ansicht von übergeordneten Elementen zu trennen, ohne die untergeordnete Ansicht zu entfernen?

Added einige Code:

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

Wie genau cachen Sie das Layout und warum machst du es so? – DroidBender

+2

Ich möchte es auf diese Weise tun, weil es keinen Sinn macht, dieselbe Ansicht, die bereits aufgebläht war, wieder aufzublasen. Als ein Beispiel muss ich 5 Textboxen zeigen, die das gleiche Layout aber unterschiedliche Inhalte haben. –

Antwort

9

Sie können dies nicht wirklich tun. Ich zitiere Ihren Kommentar

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.

Sie haben jedes Mal aufzublasen, weil Sie 5 verschiedene Instanzen dieser Textbox müssen. Wenn Sie nicht aufblasen möchten, sollten Sie eine Möglichkeit finden, das Layout zu kopieren, das bereits erstellt wurde, was nicht helfen wird, weil Kopieren auch "teuer" ist.

In der Tat, nur um es klar zu machen, wird das Aufblasen der Ansicht nicht unterzogen XML-Parsing (nur für den Fall, dass Sie denken), es ist kompilierten Code und damit die Tatsache, dass eine Anstrengung bei der Umsetzung einer So erstellen Sie eine Kopie Ihrer Ansicht ist sinnlos.

Fazit: Halten Sie sich an die Inflation.

+0

Danke. Ich bleibe bei der Inflation :) –

+0

"In der Tat, nur um es klar zu machen, wird das Aufblähen der Ansicht nicht unterzogen XML-Parsing (nur für den Fall, dass Sie denken), kompilierte Code" .... gelöst der konfisionen, die ich hatte ... thnx :-) –

+0

Wenn dies der Fall ist, wie funktioniert das Caching von Listview-Zeilen? Es scheint, dass wir dort Ansichten wiederverwenden können, wie geht das? – Justin

Verwandte Themen