2014-02-17 2 views
0

나는 프로그래밍 방식으로 checkBoxPreference 객체로 목록을 채 웁니다. 새로운 android SDK에는 이전에 구현되지 않은 setIcon() 메서드가 있습니다.Android SDK 수준에 따라 Java 객체를 형변환합니다.

그래서 checkBoxPreference 클래스를 확장하고이 gist과 비슷한 setIcon()을 구현했습니다. 내 새 클래스는 IconCheckBoxPreference라고하며 Kitkat [new SDK]에 문제가 있습니다.

나는

Object cbp; 
if(android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.HONEYCOMB){ 
    cbp  = new checkBoxPreference(this); 
    casted_cbp = CastAccordingToClass(cbp, checkBoxPreference.class); //TODO! 
}else{ 
    cbp = new IconCheckBoxPreference(this, null); 
    casted_cbp = CastAccordingToClass(cbp, IconCheckBoxPreference.class); //TODO! 
} 
casted_cbp.setTitle("My Title"); 
casted_cbp.setIcon(getResources().getDrawable(R.drawable.bla)); 

같은 뭔가를 추가 SDK 조건없이 변수 "casted_cbp"를 사용하여 내 코드를 계속합니다. "casted_cbp"의 유형은 무엇입니까? 그렇게 할 수있는 방법이 있습니까? 그런 상황에서 가장 좋은 방법은 무엇입니까?

+0

가능하지 않음 :

이 코드이 다음과 같이 표시됩니다. –

+0

일반적인 수퍼 클래스는 실제로 두 개의 서로 다른 버전 인 "checkBoxPreference"와 동일한 클래스입니다. 이전 버전에는 setIcon()이 없습니다. –

+0

'... 캐스팅 된 객체에 사용할 메소드를 포함합니다. '... –

답변

0

원하는 것은 불가능합니다.

컴파일러가 여전히 정확한 구체적인 클래스를 알고있는 경우 if에서 아이콘을 설정해야합니다.

캐스팅의 경우 공통 수퍼 클래스 객체 유형으로 CheckboxPreference을 사용하므로 플랫폼 버전과 별도로 setTitle()을 계속 호출 할 수 있습니다. 그 두 당신이 주조 목적에 사용하려는 방법을 포함하는 공통의 슈퍼 클래스가없는 경우

CheckBoxPreference cbp; 
if(android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.HONEYCOMB){ 
    CheckBoxPreference pref = new checkBoxPreference(this); 
    pref.setIcon(getResources().getDrawable(R.drawable.bla)); 
    cbp = pref; 
}else{ 
    IconCheckBoxPreference pref = new IconCheckBoxPreference(this, null); 
    pref.setIcon(getResources().getDrawable(R.drawable.bla)); 
    cbp = pref; 
} 
cbp.setTitle("My Title"); 
관련 문제