Android:为什么必须使用 getBaseContext() 而不是这个

2023-12-21

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() to this将收到错误。

谁能给我解释一下,拜托了。


  1. getApplicationContext ()返回整个应用程序生命周期的应用程序上下文,当应用程序销毁时它也会销毁。

  2. this上下文返回活动的当前上下文,属于该活动,该活动被销毁,那么它也会销毁。但在您的情况下,它将引用Spinner实例,因为我们正在使用它onItemSelected(AdapterView<?>arg0, View arg1, int arg2, long arg3)方法来自于Spinner类和Spinner继承这个方法AdapterView.OnItemSelectedListener界面

  3. getBaseContext()的方法是ContextWrapper. And ContextWrapper is, "Context 的代理实现,只需将其所有调用委托给另一个 Context。可以进行子类化以修改行为而不更改原始上下文。“(根据 javadocs)..

在你的情况下:Spinner类不是 的子类Context or ContextWrapper class*

Toast.makeText(getBaseContext(),"SELECTED", Toast.LENGTH_SHORT).show();

means getBaseContext()是方法ContextWrapper and ContextWrapper是代理实现Context所以我们间接地传递了一个 Context 类对象。

或者我们也可以传递 'Activity.this' 因为Activity类是子类ContextWrapper class .

如果你去安卓文档 http://developer.android.com/reference/android/widget/Toast.html那么这个方法需要一个 Context 类对象:
public static Toast makeText (Context context, int resId, int duration)

所以我们无法传递活动或类上下文手段this to Toast.makeText没有任何一个子类Context or ContextWrapper class.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android:为什么必须使用 getBaseContext() 而不是这个 的相关文章

  • 如何在android网络库(ION)中使用自签名SSL?

    使用此网络库 https github com koush ion https github com koush ion 由于当前状态是开发 我想使用自签名 SSL 证书 图书馆论坛有一些讨论 https github com koush
  • 如何从该 JAVA 文件中提取 Delphi 类以与 Android 一起使用?

    我的Delphi XE7项目需要与FTDI FT311 Android 配件芯片 http www ftdichip com Products ICs FT311D html 他们帮助提供了一个 Android 演示 其中包括他们的 JAV
  • 使用一个 apk 安装两个应用程序

    我有 2 个应用程序 1 内容提供者 2 使用此 ContentProvider 的应用程序 我需要使用单个 apk 文件安装这 2 个应用程序 我想在 Eclipse 中同时推送这两个应用程序 如果我将另一个项目添加到一个应用程序的构建路
  • 如何访问android库项目中的资源

    我正在构建一个 android 库项目 它内部需要一些静态资源 图像 xml 等 然后我想知道我可以把这些资源放在哪里以及如何访问它们 既然我把资源放到了assets文件夹 我使用 AssetManager 来访问资源 public cla
  • android中根据屏幕尺寸计算图像尺寸

    我正在尝试根据屏幕尺寸计算图像高度和宽度 我从后端获取 5 x 7 尺寸的图像 为了将像素乘以 72 进行转换 我有 360 X 504 尺寸的图像 对于 360 X 504 我的动态透明矩形区域将显示为 1 223 x 1 179 即 8
  • 位图内存不足错误

    我对这个错误有疑问 我从 URL 制作网站图标解析器 我这样做是这样的 public class GrabIconsFromWebPage public static String replaceUrl String url StringB
  • 使用 HttpUrlConnection Android 将 base64 编码的图像发送到服务器

    我正在尝试使用 HttpUrlConnection 将 base64 编码的图像发送到服务器 我遇到的问题是大多数图像均已成功发送 但有些图像会生成 FileNotFound 异常 我的图像编码代码可以在下面找到 public static
  • 如何向开发人员发送崩溃报告?

    我开发 Android 应用程序 但在某些情况下我的应用程序force close 如果出现以下情况 我如何向开发人员发送包含详细信息的电子邮件force close随时发生 The ACRA https github com ACRA a
  • 在 Android Lollipop 中从 Uri 中裁剪照片后总是返回 Null?

    我尝试在拍照或挑选照片后从 Uri 中裁剪图像 我的代码是这样的 public static void cropImage Uri uri Activity activity int action code Intent intent ne
  • Android Fragment onCreateView 与手势

    我正在尝试在片段中使用手势 我在 FragmentActivity 中有以下内容来处理我的详细信息片段 我试图发生的情况是 当在视图上检测到滑动时 将该视图内的数据替换为上一个或下一个条目 如果有更好的方法来处理这个问题 我完全同意 然而
  • 在选项卡上保存数据

    我有 3 个选项卡 每个选项卡都有一个单独的活动 我想在用户单击任一选项卡上的 保存 时保存数据 有几个选项可供选择 共享首选项 全局变量或将对象保存在上下文中 编辑 我必须保存图像和文本字段 Android 共享首选项 https sta
  • Emma 不生成coverage.ec

    我设置了艾玛 它曾经对我有用 然后我们更改了源代码 现在它没有生成coverage ec根本不 它确实生成coverage em 测试临近结束时 出现错误消息 exec INSTRUMENTATION CODE 0 echo Downloa
  • 如何制作在手机和平​​板电脑上使用的响应式Android应用程序?

    我创建了一个 Android 应用程序 当我运行我的应用程序时Mobile Phone它工作得很好 但是当我跑进去时Tablet应用程序的布局已更改 那么 如何制作响应式Android应用程序用于Mobile并且也在Tablet 在Andr
  • android中listview显示数据库中的数据

    我是安卓新手 我想知道如何在列表视图中显示数据库中的数据 它不会向数据库添加数据 我只是显示我们存储在数据库中的任何内容 请帮助我实现这一目标 提前致谢 使用这些课程可能会对您有所帮助 用于数据库创建 package com example
  • 有多少种方法可以将位图转换为字符串,反之亦然?

    在我的应用程序中 我想以字符串的形式将位图图像发送到服务器 我想知道有多少种方法可以将位图转换为字符串 现在我使用 Base64 格式进行编码和解码 它需要更多的内存 是否有其他可能性以不同的方式做同样的事情 从而消耗更少的内存 现在我正在
  • 未解决的包含:“cocos2d.h” - Cocos2dx

    当我在 Eclipse 中导入 cocos2dx android 项目时 我的头文件上收到此警告 Unresolved inclusion cocos2d h 为什么是这样 它实际上困扰着我 该项目可以正确编译并运行 但我希望这种情况消失
  • Android 地理围栏无法正常工作(未调用 IntentService)

    这是我的代码 安卓清单
  • 在android中创建SQLite数据库

    我想在我的应用程序中创建一个 SQLite 数据库 其中包含三个表 我将向表中添加数据并稍后使用它们 但我喜欢保留数据库 就好像第一次安装应用程序时它会检查数据库是否存在 如果存在则更新它 否则如果不存在则创建一个新数据库 此外 我正在制作
  • 如何在布局编辑器中模拟沉浸式模式

    我想在布局编辑器中全屏查看我的布局 我正在使用 eclipse 插件 我已经通过选择隐藏了 ActionBar NoActionBar组合中的主题 但导航栏是一个不同的故事 AFAIK 它只能使用代码中的标志来隐藏 我需要在活动 xml 文
  • 我应该如何在 Android 上使用 Retrofit 处理“无互联网连接”

    我想处理没有互联网连接的情况 通常我会运行 ConnectivityManager cm ConnectivityManager context getSystemService Context CONNECTIVITY SERVICE N

随机推荐

  • 将 DataFrameGroupBy 对象中的每个分组列转换为列表

    这是数据 df pd DataFrame date 1 1 2 2 2 3 3 3 4 5 request 2 2 2 3 3 2 3 3 3 3 users 1 3 7 1 7 3 4 9 7 9 count 1 1 2 3 1 3 1
  • 无效的视图状态、Base-64 字符数组或字符串的长度无效

    我时不时会遇到这个错误 ExecuteStep at line 0 at Column 0 状态信息对此页无效 并且可能已损坏 无效的视图状态 内部异常 Application Error 中未处理的异常 在加载行 0 和列 0 Base
  • 动态链接和动态加载有什么区别

    我认为 动态加载意味着在加载或运行时将库 或任何其他二进制文件 加载到内存中 因此 在下面的程序中 当 dlopen 调用的动态加载器将出现时 如果库尚未加载 它将把库加载到内存中 动态链接是指在加载或运行时完成的链接 它解决了外部引用 因
  • Laravel TokenMismatchException 会话超时

    我遇到一个问题 当用户闲置超过 24 小时 我的会话超时 或者离开网站并在 24 小时后返回时 他们不会从网站注销 但他们的会话正在被注销已过期 或者至少他们的 token 不再有效 这会导致不必要的行为 就好像用户在 token 过期后提
  • MAC:Mono Helloworld 示例

    我在 OSX Yosemite 上全新安装了 Mono 并尝试了以下示例http www mono project com docs getting started mono basics http www mono project com
  • eclipse 上“资源”目录放在哪里

    我的项目是一个 Eclipse Java 项目 它的结构是 游戏 src 游戏 资源 但这段代码返回一个异常 image new ImageIcon new URL resources Monster png java net Malfor
  • 在沙盒中哪里可以找到奇点定义文件

    我正在尝试学习奇点 所以我从他们的库中提取了这个例子 singularity pull library sylabsed examples lolcow 拉取后 我想检查该映像内的目录是什么 以及是否有任何用于构建映像的定义文件 因此我通过
  • 在网页上渲染 PDF

    我们正在尝试使用以下方式在网络浏览器中加载 pdf 文件pdf对象 http pdfobject com JavaScript API 目前我们尝试显示的 pdf 大小接近 10MB 这会导致网页上显示 PDF 时出现较长的延迟 同时下载完
  • Jackson无限循环多对一一对多关系

    我有两个模型 Parent id name childrenIds 1 parent1 1 2 2 parent2 3 Child id parentId 1 1 2 1 3 2 当我尝试使用 Jackson 序列化此模型时 发生堆栈溢出错
  • 你能弄清楚为什么这个程序会触发 IllegalStateException 吗?

    可以找到 Cipher nsdl crypto 中的所有文件here http nsdeleon wikispaces com file detail crypto zip用gcj编译的java文件 参见compile sh nmint n
  • 告诉 Gradle 检查两个目录中的主要 java 源代码

    我有一个充满测试的项目 我们用它来查询我们的环境 我们使用 Gradle 运行这些测试 我想从独立应用程序运行这些测试以摆脱 Gradle 依赖性 我正在使用 gradle application 插件并尝试使用 JUnitCore 运行
  • Automapper 在 Profile 类中注入 DbContext

    我有以下映射配置文件 public class DomainProfile Profile private FootballPredictionsContext m Context public DomainProfile Football
  • Android(Mobile)视觉相机亮度很低

    我已将谷歌视觉集成到我的项目中 如下文所示 http code tutsplus com tutorials reading qr codes using the mobile vision api cms 24680 http code
  • 构建静态链接的Boost (MinGW)

    我正在使用 bjam 为 MinGW 构建 Boost 我正在使用系统和文件系统 bjam toolset gcc stage 它构建得很好 但我希望能够静态链接到它 我必须为最终产品提供一个文件 所以我尝试了 bjam link stat
  • 使用 auth0-react 库时访问令牌的格式似乎不正确

    我正在关注这篇博文 https auth0 com blog complete guide to react user authentication 关于如何使用auth0 react 库 https github com auth0 au
  • Android - 将除某些警告之外的所有 lint 警告设置为错误

    当新的 lint 警告不在其中时 我试图使我的持续集成使构建失败lint baseline xml文件有介绍 我希望将所有 lint 警告视为错误 因此构建被中止 但我想要一种方法来指定某些 lint 检查被视为信息或警告级别 以便它们仍然
  • 从 Fancybox 打开 Fancybox 并关闭父级

    我有 fancybox 麻烦 我的产品正在 fancybox 中打开 并且内容中有相关产品 当用户单击相关链接并在新的 fancybox 中打开产品时 我想关闭 fancybox 谢谢你们的帮助 但它不起作用 产品在没有 fancybox
  • C++ 中的全局枚举

    好吧 我想将地形枚举定义为 enum terrain MOUNTAIN GRASS 或者其他的东西 我如何使这个枚举在我的项目中的所有类中定义 把你的enum头文件中的声明 地形 h ifndef TERRAIN H define TERR
  • 在 JavaScript 中强制重新加载并跳过 Service Worker

    Service Worker 可能会干扰刷新按钮 按设计 在桌面版 Chrome 上 您可以按住 Shift 键并单击刷新按钮来执行硬重新加载 而忽略任何已安装的 ServiceWorker 有没有办法强制重新加载而忽略 JavaScrip
  • Android:为什么必须使用 getBaseContext() 而不是这个

    this通常参考当前上下文 但是 在某些情况下 为什么我们必须使用getBaseContext 代替this 这意味着当使用this会注意到错误 这是我的例子 Spinner spinner Spinner findViewById R i