2010-03-30 7 views
14

내가 같은 간단한 레이아웃 XML이 있다고 가정 다음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" /> 

은 다음 호출에 어떤 차이가 있습니까? 그리고 어느 것을 사용해야합니까?

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

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

내 코드가 걸러집니다. 여기 : 버튼 \t의 xmlns : 안드로이드 = "http://schemas.android.com/apk/res/android" \t 안드로이드 : ID = "@ + ID/button01" \t 안드로이드 : layout_width = "wrap_content" \t android : layout_height = "wrap_content" –

답변

1

첫 번째 옵션은 깨끗하고 약간 더 효율적입니다.

레이아웃 인플레이터는 Button을 반환합니다. 첫 번째 옵션을 사용하면 Button에 직접 액세스 할 수 있습니다. 두 번째 옵션을 사용하면 버튼을 View으로 캐스팅 한 다음 지정된 ID로보기를 검색합니다. 이는 계층 구조에서 찾고있는 ID가 포함 된보기가 버튼이기 때문에 그 자체. 그래서 두번째 옵션은 v == button입니다.

13

이 레이아웃은 'R.layout.button'이 xml 파일 'button.xml'의 이름에 의해 생성 된 곳에서 주어진 레이아웃으로 새로운보기를 생성합니다. .inflate (...)를 호출 할 때마다 새 인스턴스가 생성됩니다.

하나가 R.id.button01이 ID 이름 'ID = "@ + ID/button01'안드로이드 '에 의해 생성 된 레이아웃 내 기존 뷰를 발견하는 동안 -

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

. .findViewById (R.id.button01)를 호출 할 때마다 'v'보기가 동일하므로 동일한 인스턴스가 생성됩니다.

button = (Button) v.findViewById(R.id.button01); 
관련 문제