问题描述
- 为什么要用getBaseContext()方法代替this
-
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
中的方法。
解决方案二:
因为这里的this指的不是Activity,而是spinner这个类,nana4ever的回答解释的很全面了
解决方案三:
Blockquote
时间: 2024-10-31 12:13:03