2010-05-21 6 views
3

나는 (다른 것들 중에서) ScrollView를 포함하는 Android에서 복합 컨트롤을 빌드하려고합니다. 문제는 Eclipse에서 컨트롤을 보려고 할 때 오류가 발생합니다. "Parser가 BridgeXmlBlockParser가 아닙니다."라는 오류 메시지가 표시되면 NullPointerException이 발생합니다.프로그래밍 방식으로 android의 사용자 정의 컴포넌트에서 scrollview (s) 만들기

스택 트레이스 : 전달 된 attrs 인수가 nullContext.obtainStyledAttributes() 호출이 null를 반환하기 때문에 NPE가 발생합니다

  • :

    java.lang.NullPointerException 
    at android.view.View.<init>(View.java:1720) 
    at android.view.ViewGroup.<init>(ViewGroup.java:277) 
    at android.widget.FrameLayout.<init>(FrameLayout.java:83) 
    at android.widget.ScrollView.<init>(ScrollView.java:128) 
    at android.widget.ScrollView.<init>(ScrollView.java:124) 
    at android.widget.ScrollView.<init>(ScrollView.java:120) 
    at my.compound.control.StringPicker.onMeasure(StringPicker.java:46) 
    ... 
    

    나는 다음과 같은 조건에 오류를 추적했습니다.

  • 이는 attrsBridgeXmlBlockParser의 인스턴스가 될 것으로 예상하는 Eclipse에 사용 된 BridgeContext 구현에만 적용됩니다.
  • (Context) 생성자를 사용하여 ScrollView를 만들기 때문에 attrs 인수는 null입니다.

내가 이클립스는 복합 형의 컨트롤을 구성 할 때받는 attrs을 통과 물론 해결 방법이 있습니다,하지만 난 내 내부 통제에 적용 할 복합 형의 컨트롤에 설정된 모든 속성을 원하지 않는다.

내가 잘못하고있는 것은 Android Eclipse에서 버그입니까?

은 my.compound.control.StringPicker.onMeasure의 모습입니다 (제거 그 선명도에 대한 비트) :

@Override 
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 
    if (this.getChildCount() != requestedLength) { 
     this.removeAllViews(); 
     int childWidth = getWidth()/requestedLength; 
     int childHeight = getHeight(); 
     for (int i = 0; i < requestedLength; i++) { 
      ScrollView child = new ScrollView(getContext()); // NPE here 
      child.setLayoutParams(new LayoutParams(childWidth, childHeight)); 
      addView(child); 
     } 
    } 
    super.onMeasure(widthMeasureSpec, heightMeasureSpec); 
} 
+0

my.compound.control.StringPicker.onMeasure에서 어떻게 작성했는지 보여 주시겠습니까? 그렇지 않으면 무엇이 잘못되었는지 말할 수 없습니다. –

+0

도움이 되었으면 좋겠습니다. – beetstra

+0

46 번째 줄은 무엇입니까? 그리고 물건을 벗으면, 우리는 무엇이 잘못되었는지 보지 못할 수도 있습니다. – CrackerJack9

답변

0

오래된 Android 버전에서는 버그로 보입니다.

문제는 Android 버전 2.3 이상에서는 나타나지 않지만 Android 2.2 이하를 선택하면 나타납니다. 이러한 오래된 Android 버전의 해결 방법은 (질문에서 언급 한대로) 생성자에서 attrs 매개 변수를 복사하는 것입니다.
이전 버전에서 Eclipse에서 디자인보기를 사용하여 이전 버전에서 응용 프로그램을 실행하려는 경우에만 해결 방법이 필요하지 않습니다.

1

어떻게 당신이 당신의 복합 형의 컨트롤을 작성, XML 레이아웃을 통해 또는 동적 코드 ? 내가 생각할 수있는 이유는 XML을 통해 추가하고 있지만 StringPicker (Context context, AttributeSet attrs) 생성자를 추가하지 않았기 때문입니다. 여기서 super (context, attrs)를 호출해야합니다.

+0

예, 이것은 제가 해결 방법으로 언급 한 것입니다. 그러나 포함 된 구성 요소에 (XML-) 특성을 적용 할 필요가 없습니다. 코드에서이를 지정하려고합니다. – beetstra

관련 문제