【问题标题】:ViewRootImpl not in Android SDKViewRootImpl 不在 Android SDK 中
【发布时间】:2014-03-18 13:32:25
【问题描述】:

只是玩了一下(我知道View.getRootView()),我手动向上爬到根目录甚至更远。

...
View tv=(View)mv.getParent();
View uv=(View)tv.getParent();
...

其实我以为有一次我会遇到NullPointerException,但结果却是

03-18 13:07:45.554 13568 13568 E AndroidRuntime: java.lang.ClassCastException: android.view.ViewRootImpl cannot be cast to android.view.View

好吧,好吧,这看起来也很合理。

我还不知道ViewRootImpl,所以我决定拿起这个话题并调查一下。

但是,当我这样做时

ViewRootImpl wv=(View)vv.getParent();

我得到一个(应得的)

[javac] /home/jagged/Downloads/android/motog/firsttry/src/tk/wellthen/main.java:285: cannot find symbol
[javac] symbol  : class ViewRootImpl
[javac] location: class tk.wellthen.main
[javac]     ViewRootImpl wv=(View)vv.getParent();
[javac]     ^

来自编译器,但是,当我根据上面的 logcat 输出完全限定它时,我得到(几乎)相同的错误消息。 (我什至从 logcat 输出中复制粘贴它以避免拼写错误。)

在尝试import android.view.ViewRootImpl 时不用说。出现了相同的消息,只是针对另一个源代码行。

此外,Google 似乎认为即使在整个 API 文档中只使用一个词来提及它也没有什么用处。我认为它主要用于内部,但如果你问我,那是没有理由的。

在 stackoverflow.com 上“ViewRootImpl”有 138 次点击(嗯,现在应该至少有 139 次),但在这种情况下它们完全不相关(如果我没有错过一些特别的东西的话)。

我查看了一些其他网站,发现了例如this source code,但我怀疑将其伪造到 SDK 中以便探索是否有用吗?

有什么建议吗?提前致谢

【问题讨论】:

标签: java android


【解决方案1】:

ViewRootImpl is annotated with @hide。这不包括用于开发的存根android.jar 中的类。该类存在于实际的运行时环境中。

另见:What does @hide mean in the Android source code?

【讨论】:

    【解决方案2】:

    如果你使用 Eclipse,ViewRootImpl 是不可见的。
    您可以改用 Android Studio。

    【讨论】:

      猜你喜欢
      • 2023-03-30
      • 1970-01-01
      • 2019-08-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多