2012-03-03 4 views
11

의 Java android 애플리케이션 내부의 익명 클래스에서 외부 클래스의 변수에 액세스하려면 어떻게해야합니까? 예 :Java의 외부 클래스의 액세스 변수

ProgressDialog dialog = new ProgressDialog(this); 
    ..... 
    send.setOnClickListener(new View.OnClickListener() 
    { 
     public void onClick(View v) { 

      //here i'd like to do something with **dialog** variable 
      ....... 

     } 
    }); 

답변

19

대화 변수는 외부 클래스 이름 (a qualified this)로 시작 외부 클래스의 필드, 당신은 this를 사용할 수있는 경우 : dialiog 변수 인 경우

send.setOnClickListener(new View.OnClickListener() 
{ 
    public void onClick(View v) { 
     ProgressDialog dlg = OuterClass.this.dialog; 
     ....... 
    } 
}); 

다른 방법으로는, 그것을 필요로하는 로컬 변수는 최종으로 표시된다 :

final ProgressDialog dialog = new ProgressDialog(this); 
..... 
send.setOnClickListener(new View.OnClickListener() 
{ 
    public void onClick(View v) { 
     // The dialog variable is in scope here ... 
     dialog.someMethod(); 
    } 
}); 
+0

이것은'dialog'가 외부 클래스의 필드 일 때 정답입니다. 이 경우에는 내부 클래스 주위의 메서드에서 로컬 변수라고 생각합니다. –

5

은 외부 로컬 변수를 확인 (dialog)를 final 그래서 내부 클래스에서 참조 할 수 있습니다.

1

로컬 변수 (서명이 암시하는 것처럼) 인 경우에는 내부 클래스가 액세스 할 수 있도록 final이어야합니다. 멤버 변수 인 경우 가시성 수정자는 기본값 (수정 자 없음) 이상 (보호 또는 공개)이어야합니다. private -modifier으로, (당신의 컴파일러 설정에 따라) 그것은 여전히 ​​작동하지만 당신은 경고를받을 수 있습니다

둘러싸 필드 SomeClass.someField에

읽기 권한이 합성 접근 방법으로 에뮬레이트

+1

멤버 변수에 관한 부분이 참이 아닙니다. 내부 클래스는 내부 클래스의 private 멤버에 액세스 할 수 있습니다. 컴파일러는 그러한 멤버에 대한 숨김 접근자를 생성합니다. – casablanca

+0

@ 카사 블랑카 : 사실, 대답을 편집했습니다. – esaj

관련 문제