Context ——常见问题

来源:互联网 发布:java线程sleep函数 编辑:程序博客网 时间:2024/05/18 02:18

一、为什么要用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。



0 0
原创粉丝点击