- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
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
}
在上面的代码中,当我将 getBaseContext()
更改为 this
将收到错误。
谁能帮我解释一下。
最佳答案
getApplicationContext ()
返回整个应用生命周期的应用上下文,应用销毁时也销毁。
this
上下文返回 Activity 的当前上下文,属于 Activity , Activity 被销毁然后它也会销毁。但在您的情况下,它将引用 Spinner
实例,因为我们在 onItemSelected(AdapterView<?>arg0, View arg1, int arg2, long arg3)
中使用它来自 Spinner
的方法类(class)和Spinner
从 AdapterView.OnItemSelectedListener
继承此方法界面
getBaseContext()
是ContextWrapper
的方法.和ContextWrapper
是,“Context 的代理实现,它只是将其所有调用委托(delegate)给另一个 Context。可以子类化以修改行为而不更改原始 Context。”(根据 javadocs)..
在你的情况下:Spinner
类不是 Context
的子类或 ContextWrapper
类*
Toast.makeText(getBaseContext(),"SELECTED", Toast.LENGTH_SHORT).show();
表示getBaseContext()
是ContextWrapper
的方法和 ContextWrapper
是 Context
的代理实现所以间接地我们传递了一个上下文类对象。
或者我们也可以传递 'Activity.this' 因为 Activity
类是 ContextWrapper
的子类类。
如果你选择 android documention那么这个方法需要一个Context类对象:
public static Toast makeText (Context context, int resId, int duration)
所以我们无法传递 Activity 或类上下文意味着 this
至Toast.makeText
没有 Context
的子类或 ContextWrapper
类。
关于Android:为什么必须使用 getBaseContext() 而不是这个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9605459/
我想实现一个音频管理器,但我不太清楚该把它放在哪个类中。如果我放在 onCreate 中,我无法引用它,但如果我把它放在我的 Broadcast Receiver 类中,它找不到 getBaseCon
此代码用于尝试 registation.class android studio 应用程序来解析数据。我的代码在最后的 getBaseContext() 代码下不断给我错误,我不知道为什么,因为我认为
我想尝试使用以下代码从我的设置中获取一些值: import android.content.SharedPreferences; import android.preference.Preferenc
如果我没理解错的话,您可以使用 getContext() 获取 View 对象的上下文。如果你想创建一个只要 Activity 存在就存在的新对象,你可以使用 Activity 上下文或 this,否
this 经常引用当前上下文。但是,在某些情况下,为什么我们必须使用 getBaseContext() 而不是 this。 (这意味着当使用 this 时会注意到错误)。 这是我的例子: Spinne
大家好,我在理解上下文并在 makeText 中使用它时遇到问题 我在这个网站上看到了很多问题,并阅读了 Android 文档中的上下文并在 makeText 方法中使用它。但我仍然不明白很多东西:
这个问题在这里已经有了答案: What's the difference between the various methods to get an Android Context? (8 个答案)
我正在创建一个从另一个类扩展的模块,但我需要使用 getBaseContext()。如何在我自己的模块中使用它?如果我必须运行该 Activity ,那么如果不是如何解决问题,该怎么做谢谢 publi
我有这个方法可以从正常的 Activity 中调用: getBaseContext().getResources().updateConfiguration(config2, getBaseConte
有什么区别: getApplicationContext() getBasecontext() getApplication() getParent() 你能用一个简单的例子详细说明吗? 最佳答案 g
在我的应用程序中,我使用 Toasts Toast.makeText(getBaseContext(), "Updating...", Toast.LENGTH_SHORT).show(); 到目前为
我正在尝试在我的应用程序中使用 firebase 远程配置功能。但我收到错误“无法解析方法‘getBaseContext()’”。我的类扩展了如下所示的 BaseAdapter。我仅限于使用方法,请帮
您好,开发人员,我有一部分可以抓取视频的帧...似乎可以正常工作,但其中一部分会出现非法参数异常...当我设置视频路径时会崩溃。这是我的代码,它在行崩溃 mediaMetadataRetriever.
getContext() 、 getApplicationContext() 、 getBaseContext() 和 "this 有什么区别>”? 虽然这是一个简单的问题,但我无法理解它们之间的基本
我正在创建一个类似 Geocoder 的对象。 Geocoder geoCoder = new Geocoder(getBaseContext(), Locale.getDefault()); 我在
我是 android 新手,我正在尝试了解 getApplication()、getApplicationContext()、getBaseContext() 之间的区别>、getContext()
我在谷歌上搜索了很多这个问题,并发现了许多关于何时使用 getBaseContext、getApplicationContext 或 Activity 自己的 this 的不同建议指针。 三个经常出现
我是一名优秀的程序员,十分优秀!