2012-08-31 17 views
5

Buduję aplikację, która dynamicznie generuje etykiety i widoki. Zdefiniowałem, jak mój "niestandardowy widok" powinien wyglądać w układzie xml iz kodu I nadmuchać ten układ.Jak buforować widoki w systemie Android?

Ponieważ zawyżony układ będzie zawsze taki sam, chcę zrobić ten krok tylko jeden raz. Po tym, jak mam układ, chcę go buforować i użyć go następnym razem, kiedy będę go potrzebować.

Problem polega na tym, że jeśli umieszczę mój zawyżony układ w pamięci podręcznej (w przykładowej mapie) i dodaję go do układu nadrzędnego, następnym razem, gdy spróbuję dodać go ponownie (tym razem otrzymam układ z pamięci podręcznej) system mówi, że mój układ ma już rodzica.

Czy znasz dowolną metodę odłączania widoku podrzędnego od obiektu nadrzędnego bez usuwania widoku podrzędnego?

Dodane niektóre kodu:

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

Jak dokładnie buforujesz układ i dlaczego robisz to w ten sposób? – DroidBender

+2

Chcę to zrobić w ten sposób, ponieważ nie ma sensu ponownie zawyżać tego samego widoku, który był już zawyżony. Jako przykład muszę pokazać 5 pól tekstowych, które mają ten sam układ, ale inną treść. –

Odpowiedz

9

Nie można rzeczywiście to zrobić. Cytuję komentarz

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.

Będziesz musiał nadmuchać każdym razem, bo trzeba 5 różnych wystąpień tego pola tekstowego. Jeśli nie chcesz się nadmuchać, powinieneś znaleźć sposób na skopiowanie już utworzonego układu, który nie pomoże w poprawie, ponieważ kopiowanie jest również "kosztowne".

W gruncie rzeczy, aby to wyjaśnić, zawyżanie widoku nie jest poddawane analizie XML (tak na wszelki wypadek), jest to skompilowany kod, a co za tym idzie, trud włożony w implementację sposób na stworzenie kopii twojego widoku jest bezcelowy.

Linia dolna: Trzymaj się inflacji.

+0

Dziękuję. Będę trzymać się inflacji :) –

+0

"W rzeczywistości, aby to wyjaśnić, zawyżanie widoku nie jest poddawane analizie XML (tak na wszelki wypadek), jest to skompilowany kod" .... rozwiązany jeden z confisions miałem ... thnx :-) –

+0

Jeśli tak jest, to jak działa buforowanie wierszy listview? Wygląda na to, że możemy tam ponownie wykorzystać widoki, jak to się dzieje? – Justin

Powiązane problemy