哪个类在Android中实现ContextWrapper的方法?

时间:2012-01-25 14:55:49

标签: java android model android-sdcard

在开发Android-Apps时,我喜欢看一下内部SDK实现。这是一个庞大的框架,如果您知道内部方法是如何实现的,有时它会有很大帮助。

现在我做的最后一次检查对我来说真的很困惑。我查看了Context类来阅读一些实现。不幸的是,大多数都是抽象的,这就是Android发明ContextWrapper(一个简单的适配器模式)的原因。

问题是,我找不到一些我感兴趣的方法。让我们以getResources为例。我有一个ContextObject并在其上调用getResources。此上下文是Activity的实例(它本身不实现getResources())。

相同的ContextThemeWrapper是Activity的直接父类。然后ContextWrapper在其getResources()成员上调用Context。但是谁在实施呢?

编辑:从ContextWrapper添加了Snippet

public class ContextWrapper{
    Context mContext

    public ContextWrapper(Context ctx){
        mContext = ctx
    }

    public Resourced getResources(){
        return mContext.getResources()
    }

    //... all other Methods are implementing the same AdapterPattern
}

所以问题也可以是“将哪个Context传递给ContextWrapper,它正在实现所需的方法”

2 个答案:

答案 0 :(得分:3)

我终于通过nicholas.hausschild的有用提示找到了它,只是为了运行调试器。

不幸的是,这似乎是找到它的唯一方法,因为它是在名为ContextImpl的类中实现的,它是可读包的(尽管没有记录)。您必须安装Eclipse source-code plugin(如果您已经下载并将Android-SDK链接到eclipse,那么安装它似乎是一个小小的错误)来查看源代码。

对于对这些来源感兴趣的任何人:clickme

答案 1 :(得分:2)

getResources()类上的Context方法是抽象的,这意味着从它需要提供或覆盖其实现的任何继承。 getResources()类上ContextWrapper的实现是具体的,您应该找到它的代码。

此外,你的继承链有点倒退。 ActivityContextThemeWrapper的子类,而不是相反:

java.lang.Object
  ↳ android.content.Context              // abstract Resources getResources()
    ↳ android.content.ContextWrapper     // Resources getResources()
      ↳ android.view.ContextThemeWrapper // inherits ContextWrapper.getResources()
        ↳ android.app.Activity           // inherits ContextWrapper.getResources()

Android Developer Reference将帮助您继承结构。