【问题标题】:Which context to use for Toast in Android?在 Android 中用于 Toast 的上下文是什么?
【发布时间】:2016-10-18 03:18:35
【问题描述】:

我刚刚了解到我可以使用任何一种:

Toast.makeText(MainActivity.this, R.string.some_string,Toast.LENGTH_SHORT).show();

或者,

Toast.makeText(getApplicationContext(), R.string.some_string,Toast.LENGTH_SHORT).show();

在 Android 中显示 Toast。

之前我认为上下文实际上是父窗口的一种句柄,但 documentation 对此并不清楚。

然后我看到了这张桌子:

它似乎也没有提到 Toast 到底使用什么上下文?

编辑:

上下文是否像 Toast 这样的子窗口的“父窗口句柄”?还是它实际上允许Toast.makeText 访问资源或其他东西?

如果上下文无关紧要,为什么还要使用它?

【问题讨论】:

标签: android android-context android-toast


【解决方案1】:

查看Toast.java,我可以看到Context仅用于:

  • 获取Resources
  • 获取包名
  • getText 实际上和#1 一样

显然,ActivityApplicationContext 没有区别,除非这些资源取决于主题(据我所知并非如此)。

不,传递给 Toast 的上下文在任何意义上都不是父窗口的句柄。

【讨论】:

    【解决方案2】:

    我建议在您的情况下使用该活动。由于您是从活动本身调用的。该活动是一个上下文,您正在使用活动上的方法来获取另一个上下文(应用程序)。有点没必要。

    但是,如果您从其他地方调用 toast,则使用该应用程序可能是一个更好的主意,因为当您的应用程序处于活动状态时,该应用程序将始终存在。

    【讨论】:

      【解决方案3】:

      对于短暂的祝酒词,您通常可以使用任何您想要的上下文。通常,您会使用活动上下文,但应用程序上下文也可以。

      【讨论】:

      • 是的,这是有道理的。请查看我的问题以进行修改。
      【解决方案4】:

      您只能从 UI(主线程)上下文中显示 Toast。如果您想从服务中显示此内容(但这与 Google 指南相矛盾),您可以这样做:Show toast at current Activity from service

      【讨论】:

      猜你喜欢
      • 2022-11-18
      • 2016-02-11
      • 2011-05-11
      • 1970-01-01
      • 2017-09-01
      • 1970-01-01
      • 2011-04-25
      相关资源
      最近更新 更多