2012-11-27 4 views
1

타입 캐스팅에 대한 오해가있을 수 있지만 여기에는 제 문제가 있습니다. 이제android - 하위 클래스로 ToggleButton을 캐스팅하십시오

private ToggleButton mRecordButton = null; 

, 나는 ToggleButton을의 서브 클래스를 구현 RecordButton 전화 :

<LinearLayout 
    ... > 
    <ToggleButton 
     android:id="@+id/btnRec" 
     android:layout_width="125dp" 
     android:layout_height="wrap_content" 
     android:textOff="Start TEST" 
     android:textOn="Stop TEST" /> 
    ... 
</LinearLayout> 

그런 다음 내 활동에 내가 ToggleButton의 변수를 선언 :

나는 ToggleButton을 가진 안드로이드보기 있어요 :

class RecordButton extends ToggleButton { 

    OnCheckedChangeListener clicker = new OnCheckedChangeListener() { 
     ... 
    }; 

    public RecordButton(Context ctx) { 
     super(ctx); 
     setOnCheckedChangeListener(clicker); 
    } 
} 

그리고 마지막으로 onCreate에 있습니다. 해당 ID로 :

mRecordButton = (RecordButton) findViewById(R.id.btnRec); 

이 메시지는 ClassCastException을 표시합니다.

왜? ToggleButton (수퍼 클래스)의 RecordButton (하위 클래스)에 어떻게 캐스트 할 수 있습니까? 당신의 XML에

+0

왜? 왜냐하면 XML에서는 RecordButton이 아닌 ToggleButton을 선언하기 때문입니다. RecordButton을 선언 해보십시오. – njzk2

답변

5

, 사용자 정의 하나 일반 ToogleButton 교체 ..

<LinearLayout 
... > 
<package.class.RecordButton 
    android:id="@+id/btnRec" 
    android:layout_width="125dp" 
    android:layout_height="wrap_content" 
    android:textOff="Start TEST" 
    android:textOn="Stop TEST" /> 
... 

2

당신은 레이아웃에 뷰를 사용할 수 있습니다 안드로이드 SDK와

<LinearLayout 
    ... > 
    <com.project.RecordButton 
     android:id="@+id/btnRec" 
     android:layout_width="125dp" 
     android:layout_height="wrap_content" 
     android:textOff="Start TEST" 
     android:textOn="Stop TEST" /> 
    ... 
</LinearLayout> 

이클립스 자동으로 수 조회수를 결정하십시오.

관련 문제