this
常常引用當前的 context。但是有些時候,必須使用getBaseContext()
來代替this
。就是說使用this
會引發錯誤。
如下面的例子:
Spinner spinner = (Spinner) findViewById(R.id.spinner);
spinner.setAdapter(adapter);
spinner.setOnItemSelectedListener(new OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?>arg0, View arg1, int arg2, long arg3){
Toast.makeText(getBaseContext(),"SELECTED", Toast.LENGTH_SHORT).show(); //this line
}
當我把getBaseContext()
變成this
就會有錯誤。
為什麼這種情況下必須使用getBaseContext()
方法,而不能使用this
呢?
1.getApplicationContext ()
方法在應用程序要被摧毀時,返回整個應用程序生命周期的應用上下文。
2.this
應用上下文返回activity的當前上下文,屬於activity。當它被摧毀時,activity也被摧毀。但是在你的事例中它是指Spinner實例,因為我們在onItemSelected(AdapterView<?>arg0, View arg1, int arg2, long arg3)
方法中使用它。這個方法是來自Spinner類,而Spinner從AdapterView.OnItemSelectedListener
接口中繼承這個方法。
3.getBaseContext()
是 ContextWrapper
中的方法。