2013-02-27 2 views
3

이 질문은 다소 이상하게 들릴지 모르겠지만 어떻게 자바에서 상수를 호출합니까? 것은 내가 AlertDialog android 클래스로 놀고있다. 이 클래스는 보호 된 생성자를 가졌으므로 대화 상자를 만들 때 내 활동 클래스에서 해당 생성자를 호출 할 수 없습니다. 그래서 내가 아이에 AlertDialog 클래스를 만들어 같이, 그 생성자가 공개 한 : 그런자바에서 상수를 호출하는 방법은 무엇입니까?

public class TestAlert extends AlertDialog { 

public TestAlert(Context context) { 
    super(context); 
} 

public TestAlert(Context context, int theme) { 
    super(context, theme);  
} 
} 

그리고 내가 만든 대화 상자 :

TestAlert ta = new TestAlert(con, AlertDialog.THEME_DEVICE_DEFAULT_DARK); 
    ta.setMessage("Hello");  
    ta.show(); 

여기서 이상한 것은이 코드이다 잘못되었습니다 : AlertDialog.THEME_DEVICE_DEFAULT_DARK 그리고 나는 이유를 모르겠습니다.

Android developers 페이지에서 AlertDialog 클래스에 대해 이러한 테마가 상수라는 것을 분명히 알 수 있습니다. (공개, 정적, 최종). 정적이기 때문에 클래스 이름을 사용하여 점을 찍고 그 다음에 점을 붙여야합니다. 그것들은 공개되어 있으므로 아무런 문제가 없어야합니다. 그러나 이상한 것은 내가 그것을 할 수 없다는 것입니다.

new TestAlert(con, 2); 

p.s : :이 같은 숫자 대신 상수 이름, 작업을 통과하지만 나는 건물의 대화에 대한 AlertDialog.Builder를 사용해야합니다 알고있다. 그러나 내가 "탐험"한다고 부를 수 있습니다.

도움말이 유용합니다.

+4

"여기, 상수 야!" –

+2

"이 코드가 잘못되었습니다"란 무엇을 의미합니까? – Andremoniy

+0

어떤 API 버전을 대상으로 정의 된 상수는 어떤 API 버전입니까? – Mike

답변

11

상수를 "호출"하지 않으므로 참조하십시오. 당신이 그들을 참조하는 방식은 public static과 같은 상수 일 수 있으며 TestAlert 생성자는 두 번째 인수를 int으로 올바르게 받아들이고 있습니다.

이러한 테마 상수는 API 레벨 14에 추가되었습니다. 이전 API를 대상으로 컴파일하거나 타겟팅 한 경우에는 존재하지 않습니다.

+0

좋아, 지금 .. 나는 나 자신을 죽여야 할 것 같은 기분이야. 당신 말이 맞아요. API 레벨 8을 타겟팅했습니다. 감사합니다. – rootpanthera

+0

@ rootpanthera : :-) 우리는 모두 그런 짓을 했어. 너 자신을 때리지 마. –

관련 문제