2011-02-15 3 views
0

사용자 정의 alertdialog를 부풀려서 이상한 것을 발견했습니다.보기를 부 풀릴 때 xml id를 찾을 수 없습니다.

layout = inflater.inflate(R.layout.call_or_sms_dialog,(ViewGroup)findViewById(R.id.contacts)); 

inflate() 메소드는 2 개의 인수, 팽창 될 자원 및 생성 된 대화 상자의 부모가되는 선택적보기를 취합니다. 내 문제는 선택적보기 부분에 온다.

findViewById (R.id.contacts)에서 루트보기의 ID를 찾을 수 없습니다. "연락처"는이 특정 활동에 대한 컨트롤이 포함 된 xml 파일입니다. 다른 활동의 다른 XML 파일을 참조 할 수 있었지만이 연락처 .xml을 참조 할 수 없었습니다.

Eclipse에서 "clean"빌드를 시도하고 R.java를 재생성했지만 여전히 도움이되지 않습니다. 대신 "contacts.xml"이라는 ID를 직접 생성 할 수있는 방법이 있습니까?

답변

3

"연락처"이 특정 활동에 대한 컨트롤이 포함 된 XML 파일입니다

그것이 XML이 있다면, 당신은 R.id를 사용하여 액세스 할 수 없습니다; R.xml 또는 R.layout과 같은 것입니다. 물론 findViewById을 사용하는 경우 유효한 ID (R.id이 나타내는 값)를 전달해야합니다. 그래서 ... 당신이해야 할 일은 당신이 참조하기를 원하는 뷰에 ID를주는 것입니다. 예를 들면 :

또한
<ViewGroup 
    android:id="@+id/contacts" 
    blah 

, 직접 findViewById 방법을 사용하는 경우, ID가 현재 레이아웃 (나는 setContentView에서 설정 한 레이아웃을 의미)의 일부가되어야한다는 점에 유의하십시오. ID가 현재 레이아웃에 속하지 않으면 대신 referenceToTheViewContainingTheIDResource.findViewById()과 같은 것을 실행해야합니다.

+0

기독교인. R.layout이 트릭을하는 것처럼 보입니다. 같은 일을하는 또 다른 활동이 있지만 그 레이아웃은 R.id에서 참조 할 수 있습니다. XML 파일이기도합니다. 사실 현재 XML 파일 중 2 개를 참조 할 수 있습니다. 왜 이렇게이다? – Creniale

+1

'R.id'를 사용하여 레이아웃을 참조 할 수있는 방법은 없습니다. XML 리소스의 ID가 레이아웃과 같은 방식으로 호출되면,'R.id'를 통해 레이아웃을 참조하고있는 것처럼 보일 수 있지만, 실제로는 그렇지 않습니다. P – Cristian

+0

알 수 있습니다. 그렇다면 R.layout이 대신 참조하는 것이 좋습니다. 다시 한번 감사 드리며 +2 버튼이 어떻게 생겼는지 궁금합니다. ;) – Creniale

0

두 번째 인수는 기존보기가 아니며 사용자가 팽창하는 레이아웃의 루트보기가 아닙니다. 이게 문제 야? 항상 null을 두 번째 인수로 전달할 수 있습니다.

+0

Ted에게 답장을 보내 주셔서 감사합니다. null을 넣으려고했지만 작동하지 않습니다. 예외가있었습니다. – Creniale

2
Please try this code: 

LayoutInflater inflater = LayoutInflater.from(this); 
AlertDialog alertDialog = new AlertDialog.Builder(this).create(); 
    alertDialog.setTitle("SET YOUR TITLE"); 

View view = inflater.inflate(R.layout.call_or_sms_dialog, null); 
v = (ViewGroup)findViewById(R.id.contacts); 
alertDialog.setView(view); 
관련 문제