一、为什么要用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呢?
答案:
二、new AlertDialog.Builder(getApplicationContext())时会发生错误
答案:AletrDialog依赖的是一个View, 而View对应一个Activity,若传入getApplicationContext(),其生命周期是整个应用,当退出当前Activity的时候,就会报Unable to add window -- token null is not for an application的错误,应该传入当前Activity的Context。
本文解释了为何在某些Android开发场景下需要使用getBaseContext()而不是this关键字,特别是在处理Spinner和AlertDialog时,避免因Activity生命周期结束导致的错误。

被折叠的 条评论
为什么被折叠?



