2014-09-14 2 views
0

다른 질문과 유사하지만 솔루션을 찾지 못했습니다.findViewById()에서 사용자 정의보기 반환 null

main_layout.xml있는 CustomView는 서피스 뷰 SurfaceView를 확장

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    ... > 

     <package.CustomView 
     ... > 
     </package.CustomView> 

     <TextView 
     android:id="@+id/text_view" 
     ... > 
     </TextView> 

    </RelativeLayout> 

: 나는 XML 파일에 의해 정의 된 레이아웃을 가지고있다.

onCreate에서 setContentView (R.layout.main_layout)가 있습니다. 내가 팽창하고 싶다면 지금, 예를 들어, 활동의 텍스트 뷰 나는 된 setContentView (...) 후

TextView textView = (TextView) findViewbyId(R.id.text_view); 

를 추가해야하고 모든 잘 작동합니다. 하지만이 줄을 내 CustomView 메서드에 넣으면 null 포인터가 생깁니다. 왜?

답변

1

findViewById()은 지정된보기와 그 하위 항목을 통과합니다. 그것은 형제 자매의 견해를 찾지 못할 것입니다. 텍스트 뷰는 하위 뷰가 아닌 사용자 정의 뷰의 형제입니다.

활동에서 findViewById() 탐색이 시작되는 루트보기는 활동 창 (Activity.findViewById())입니다. 보기에서는보기 자체 (View.findViewById())입니다. 당신의 CustomView 클래스 내부

(Activity)getContext()).findViewById(R.id.youViewToBeFound); 

을 : 나는 CustomViews에서 ID로보기를 찾을 수있는 쉬운 방법을 제공하고자 위에

+0

고마워요! 매우 명확한! – bluePhlavio

0

도움이 설명을 이해.

이 코드는 생성자 코드 이후에 실행해야합니다. 내부 onAttachedToWindow()

관련 문제