2017-12-25 11 views
0

안녕하세요 저는 android을 처음 사용하며이 컨텍스트에서이 키워드와 혼동합니다. 다음은 버튼을 누를 때 단순히 화면에 인쇄하는 코드입니다. 그러나 스튜디오는 문제를 제기하고있다.익명 클래스의 액티비티는 무엇입니까

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    Log.d("My app","onCreate is called"); 
    Toast1("onCreate"); 
    Button btn=(Button)findViewById(R.id.button); 
    btn.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Log.d("My app","Button is pressed"); 
      Toast.makeText(this,"Button pressed",Toast.LENGTH_SHORT).show();//Here is a error 
     } 
    }); 
} 

이 키워드가 참조하는 활동이나 클래스를 알 수있는 방법은 무엇입니까?

+0

https : //로 성 ackoverflow.com/questions/4128589/difference-between-activity-context-and-application-context this this –

답변

2

익명 클래스에서 this은 익명 클래스의 블록을 나타냅니다. 익명 클래스를 포함하는 활동 클래스를 참조하려면, this 키워드

ActivityClassName.this 

Toast하기 전 클래스 이름과 .을 추가 할 필요하면이 표시되는 활동의 상황이나 문맥을 필요로 응용 프로그램

토스트 사용하여 활동 상황의

Toast.makeText(Activityname.this,"Button pressed",Toast.LENGTH_SHORT).show(); 

하지 않음 e :Toast이 익명의 클래스에 속하면 ActivityName.this을 사용해야합니다. 그런 경우가 아니라면 this을 사용하면됩니다.

토스트 사용하여 애플리케이션 컨텍스트

Toast.makeText(getApplicationContext(),"Button pressed",Toast.LENGTH_SHORT).show(); 
+0

컨텍스트가 메서드를 다루는 클래스가 아닌가? 토스트의 컨텍스트가 익명 클래스 여야합니다. –

+0

참조 편집 된 답변 – Yousaf

1

는 "MyActivity"호출을 사용하여 활동이 당신이 할 수있는 경우 다음

MyActivity.this 

이 코드 덩어리가 반환됩니다 이 외부 클래스 의 "현재"개체가 당신을 위해 작동합니다.

 protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    Log.d("My app","onCreate is called"); 
    Toast1("onCreate"); 
    Button btn=(Button)findViewById(R.id.button); 
    btn.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Log.d("My app","Button is pressed"); 
      Toast.makeText(MyActivity.this 
    ,"Button pressed",Toast.LENGTH_SHORT).show();//here is the working code for you 
     } 
    }); 
} 
1

수명이 짧은 토스트의 경우 일반적으로 원하는 모든 컨텍스트를 사용할 수 있습니다. 일반적으로 액티비티 컨텍스트를 사용하지만 애플리케이션 컨텍스트는 괜찮습니다.

그래서 Classname.this 예 : - MainActivity.this 또는 getApplicationContext();를 사용할 수 있습니다.

1

기본적으로 onClick(View v) 방법은 인터페이스 android.view.View.onClickListner의 방법은 너무 컨텍스트의 this 키워드 그래서 당신은 코드를 아래와 같이 버튼 onClickListner에 관련 Activitythis 키워드의 참조를 정의 할 수있다 익명 클래스

에 속하지 않는 구현 익명의 클래스입니다 이상의 참조 검사에 대한

btn.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     Log.d("My app","Button is pressed"); 
     Toast.makeText(MainActivity.this,"Button pressed",Toast.LENGTH_SHORT).show(); //Change here 
    } 
}); 

this link