2010-03-30 14 views
14

Załóżmy, że mam prosty układ xml jak poniżej:nadmuchać vs findViewById

button.xml:

<Button 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/button01" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" /> 

Czy są jakieś różnice w następujących połączeń? i który powinienem użyć?

button = (Button) getLayoutInflater().inflate(R.layout.button, null); 

i

View v = getLayoutInflater().inflate(R.layout.button, null); 
button = (Button) v.findViewById(R.id.button01); 
+0

Ups, odfiltrowuje mój kod. tutaj: Przycisk \t xmlns: android = "http://schemas.android.com/apk/res/android" \t android: id = "@ + id/button01" \t android: layout_width = "wrap_content" \t android: layout_height = "wrap_content" –

Odpowiedz

1

Pierwsza opcja jest czystsze i nieco bardziej wydajny.

Twoje ciśnienie w układzie zwróci wartość Button. W pierwszej opcji uzyskujesz bezpośredni dostęp do Button. Drugą opcją jest naciśnięcie przycisku do View, a następnie poszukiwanie widoku o podanym ID, co jest dodatkowym bezużytecznym porównaniem, ponieważ widok o identyfikatorze, którego szukasz w hierarchii, to przycisk samo. Tak więc w drugiej opcji: v == button.

13

Ten tworzy nowy widok z danym układem, gdzie "R.layout.button" jest generowany przez nazwę pliku xml "button.xml". Za każdym razem, gdy wywołasz .inflate (...) otrzymasz nową instancję.

View v = getLayoutInflater().inflate(R.layout.button, null); 

-

Mimo, że jeden znajdzie istniejący widok w układzie gdzie R.id.button01 jest generowany przez nazwę id 'android: id = "@ + id/button01"'. Za każdym razem, gdy wywołasz. FindViewById (R.id.button01) otrzymasz to samo wystąpienie, ponieważ widok "v" będzie taki sam.

button = (Button) v.findViewById(R.id.button01); 
Powiązane problemy