2013-01-28 5 views
0

나는 수신기 (setOnItemClickListener)를 추가 한 ListViewActivity을 가지고 있습니다. 언급 한 이상 내가 리스너에서이 방법 안에있을 때는 :Activity.this Context

활동에 액세스하기 위해
public void onItemClick(AdapterView<?> parent, View view, int pos, long id) 

, 내가이 짓을했는지 : host 변수에서

MyActivity host = (MyActivity) parent.getContext(); 

을, 나는 액세스 할 수 있습니다 모든 MyActivity 메소드 및 속성 (정적이 아님)에 액세스하지만 MyActivity.this 참조에 액세스 할 수 없습니다.

누군가 내게 이유를 설명해 주시겠습니까? 감사합니다

답변

2

MyActivity.this 코드가 내부 클래스에서 실행될 때 "외부"MyActivity 클래스의 인스턴스를 참조합니다. - 그거야? 그렇다면 왜 host 변수가 필요한가요?

업데이트 : 그것은 단지 당신이 모든 당신이 내부 클래스 내에서 MyActivity.this를 통해 액세스 할 것이라는 사실을 누락 될 수 있다는 것을 나에게 발생, 당신은 당신의 특정 설정에 host를 통해 액세스 할 수 있습니다.

업데이트 :this의 의미를 잘못 이해 한 것 같습니다. 원래는 이 객체, 즉 코드가 실행되는 클래스를 의미합니다.

추가 표기 Class.this을 사용하면 Java를 사용하면 코드의 외부 클래스 인스턴스에 액세스 할 수 있지만 내부 클래스에서만 가능합니다. 다음 예에서

, Class.this 작품 :

또한
class A { 
    int a; 
    class B { 
     void process_a_in_A() { 
      A.this.a++; 
     } 
    } 
    // however, this does NOT work b/c 
    // static inner classes do not have references t oouter classes 
    static class C { 
     void process_a_in_A() { 
      // error -- class A.C is detached from its outer class A 
      A.this.a++; 
     } 
    } 
} 

, 다음 예에서, Class.this가 작동하지 않습니다. 그 이유는 시스템이 클래스 A의 인스턴스가 있는지 여부와 클래스 A의 가능한 많은 인스턴스 중 어느 것이 참조하기를 원하는지 여부를 알 수 없기 때문입니다.

class A { 
    int a; 
} 

class B { 
    void process_a_in_A() { 
     // A here is a class name, not an object reference; 
     // so A.this is meaningless in this context 
     A.this.a++; 
    } 
} 

다시 한번, 당신이 그것을 구체적으로을 에 대답하는 데 필요한 정보를 제공하지 않고 질문을 양해하여 주시기 바랍니다, 그래서 그것은 단지 일반적으로 답변을 얻을 수 있습니다 당신은 내부 클래스에 대한 잘못된 이해하는 것 같습니다 표기법은 Class.this입니다. , 왜 그냥 (특히 내부 - 클래스에 사용)> Name.this 이미 객체가 변수 호스트에서 언급했듯이

-

+0

물론 내 코드에서 _host_를 통해 액세스하고 있습니다. ** MyActivity 속성을 MyActivity.this **를 통해 액세스 할 수없는 이유를 이해할 수 없어서 내 질문이 온다. 또한, 이클립스 "호스트"를 입력하면, 그것은 나에게 많은 가능성을 보여 주지만, ** **이 포함되지 않습니다. 감사합니다 – user1205781

+0

@ user1205781 내 업데이트 된 답변을 참조하십시오. –

+0

당신이 말하는 말이 정확합니다. 그러나 당신은 나의 질문을 이해하지 못했습니다 (확실히 저는 잘 설명하지 못했습니다).나는 호스트 객체를 가지고있다 – user1205781

1

정확히 어떤 클래스 내에서, 당신은 이름을 통해 자신을 참조 할 수 있습니다 그때 그것을 사용합니까?!

+0

답변 해 주셔서 감사합니다. 위의 클래스 스태커와 같은 것을 말씀드립니다. – user1205781