【问题标题】:return object of getContextgetContext 的返回对象
【发布时间】:2018-04-26 05:54:03
【问题描述】:

当我从onClick(View view) 执行view.getContext 时,我观察到它并不总是提供主机活动对象。

那么,view.getContext() from onClick(View view) 什么时候返回 ContextThemeWrapper 对象,或者什么时候返回主机活动对象或任何其他对象?

【问题讨论】:

  • 返回什么Context 实现真的很重要吗?你想用它做什么?
  • 是的,根据我的要求,我只想在 onClick 方法中使用主机活动。
  • 所以你不能这样做或改变你的要求......顺便说一句,为什么你得到什么上下文真的很重要?你想用它做什么?
  • 我无法更改我的要求,我想从此 onClick 方法调用主机活动方法。我还想知道为什么它有时会提供 ContextThemeWrapper 对象,有时还会提供活动。
  • 不不不,您所要做的就是创建一些您的活动将实现的接口并在 onClick 回调中使用该接口

标签: android onclick android-context


【解决方案1】:

上下文是有关应用程序环境的全局信息的接口。

Activity 类扩展了 ContextThemeWrapper,如果您希望您的 Activity 作为参数,您需要将上下文强制转换为您的 Activity 或在您的组件之间创建您的接口。

如果你想知道为什么,你需要阅读源代码: https://android.googlesource.com/platform/frameworks/base/+/refs/heads/master/core/java/android/view/LayoutInflater.java

在第 758 行:

if (themeResId != 0) {
     context = new ContextThemeWrapper(context, themeResId);
}

在第 908 行:

if (hasThemeOverride) {
        context = new ContextThemeWrapper(context, themeResId);
}

所以...如果你想将你的活动作为参数传递,你不应该使用上下文。

【讨论】:

  • 但它并没有解释为什么它有时会给出 ContextThemeWrapper 对象,有时会给出 Host 活动对象。
  • 不,我还没有看到,如果你知道的话请告诉我
  • @pskink 我已经看到了链接。但是没有看到源代码。如果你看过源代码并发现了什么,请告诉我。
猜你喜欢
  • 2013-03-18
  • 1970-01-01
  • 2011-10-11
  • 2020-01-20
  • 2018-10-20
  • 1970-01-01
  • 2018-12-30
  • 2018-07-11
  • 2021-06-30
相关资源
最近更新 更多