微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用 Android 的资源覆盖机制覆盖布局文件时 findViewById 返回 null

如何解决使用 Android 的资源覆盖机制覆盖布局文件时 findViewById 返回 null

我想修改 AOSP 代码中现有的布局 A,但我不想直接修改此布局 A,而是想定义一个覆盖布局 A 的新布局 B,以避免修改原始布局。

overlay 目录中布局 B 的目录结构与布局 A 的目录结构相匹配,overlay 目录已经在 make 文件中像这样定义了

PRODUCT_PACKAGE_OVERLAYS := <my-overlay-directory>

在布局 A 中,一些视图定义了一些关联的 id。这些 id 在这样的 Java 源文件中被引用

object.setContentView(contentView);

...

final View myView1 = object.findViewById(R.id.someViewId1);
final View myView2 = myView1.findViewById(R.id.someViewId2);

在新布局 B 中,视图的定义方式与布局 A 完全相同,具有相同的 id。但是,在运行时,我看到调用 myView1.findViewById(R.id.someViewId2) 时出现 NullPointerException,这表明 myView1 为空。在overlay目录中没有布局B,原来的代码可以正常工作,但是当布局被覆盖时会出现异常。这让我相信 findViewById 在覆盖布局文件时没有正确找到视图。有谁知道为什么 findViewById 返回 null 以及是否可以覆盖布局文件

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。