hqt*_*hqt 31 android this android-context
this经常参考当前的背景.但是,在某些情况下,为什么我们必须使用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
}
Run Code Online (Sandbox Code Playgroud)
在上面的代码中,当我更改getBaseContext()为this将收到错误.
请问谁可以帮我解释一下.
ρяσ*_*я K 51
getApplicationContext () 返回整个应用程序生命周期的应用程序上下文,当应用程序将销毁时,它也将销毁.
this上下文返回活动的当前上下文,属于活动,活动被销毁然后它也会销毁.但在你的情况下,它将引用Spinner实例,因为我们在onItemSelected(AdapterView<?>arg0, View arg1, int arg2, long arg3)来自Spinner类的方法中使用它 并Spinner继承此方法来自AdapterView.OnItemSelectedListener界面
getBaseContext()是方法ContextWrapper.并且ContextWrapper," 代理实现Context,简单地将其所有调用委托给另一个Context.可以子类化以修改行为而不改变原始Context. "(根据javadocs)..
在你的情况下:Spinnerclass不是子类Context或ContextWrapper类*
Toast.makeText(getBaseContext(),"SELECTED", Toast.LENGTH_SHORT).show();
Run Code Online (Sandbox Code Playgroud)
means getBaseContext()是方法,ContextWrapper并且ContextWrapper是Proxying实现,Context所以间接地我们传递一个Context类对象.
或者我们也可以传递'Activity.this',因为Activityclass是类的子ContextWrapper类.
如果你使用android documention,那么这个方法需要一个Context类对象:
public static Toast makeText (Context context, int resId, int duration)
所以我们不能够通过一个活动或类中是指this以 Toast.makeText不具备的任何一个子类Context 或ContextWrapper类.
Ser*_*tov 14
在您的示例中,this指的是新创建的OnItemSelectedListener不是任何上下文对象.如果此代码处于活动状态,您可以编写YourActivity.this而不是getBaseContext().
OnItemSelectedListener listener = new OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?>arg0, View arg1, int arg2, long arg3){
// this.equals(listener) == true;
// getBaseContext() here means YourActivity.this.getBaseContext()
// getBaseContext() called from outer context object (activity, application, service)
}
}
Run Code Online (Sandbox Code Playgroud)
如果此代码在Activity中MyActivity,您也可以替换getBaseContext()为MyActivity.this.
这是因为this引用OnItemSelectedListener实例,而不是Activity.
getBaseContext()指的是Activity上下文.
OnItemSelectedOnItemSelectedListener方法 this 指的是您使用的
新实例。getBaseContext你是外班吗?
| 归档时间: |
|
| 查看次数: |
67167 次 |
| 最近记录: |