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

覆盖资源时无法通过 ID 查找视图?

如何解决覆盖资源时无法通过 ID 查找视图?

我有一个布局,其中包含一个看起来像这样的 TextView

<TextView xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/visual_text"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textColor=?android:attr/colorAccent
        android:maxLines="3"
        android:gravity="center_vertical" />

我已经指定了一个覆盖目录,我正在尝试使用一个类似的文件覆盖布局文件,除了一些细微的差异

<TextView xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/visual_text"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textColor=?android:attr/colorPrimary
        android:maxLines="3"
        android:gravity="top" />

我的应用程序构建成功,但是,当我的 Java 代码尝试设置 TextView 的文本时,我在运行时看到 NullPointerException

private void setVisualText(View someView) {
        View view = getLayoutInflater().inflate(R.layout.myLayout,someView,false);
        TextView myText = (TextView)view.findViewById(R.id.visual_text);
        myText.setText(R.string.myString);
}

异常仅发生在覆盖文件中,并且代码在没有覆盖的情况下运行良好。有谁知道为什么 myText 为空以及为什么它没有正确找到视图?我的猜测是它与 ID 有关,但我不确定为什么它不能正确解析。

解决方法

所以你有一个 TextView 和一个重叠的 TextView? 如果是这样,您不应该使用相同的 ID。 ID 只能使用一次。

你为什么打电话?

getLayoutInflater().inflate(R.layout.myLayout,someView,false);

如果你想从主 contentView 获得一个视图,你可以使用:

findViewById(id);

因为如果你想将膨胀的视图附加到你必须调用的根:

getLayoutInflater().inflate(R.layout.myLayout,true);

请尝试使用 (..true)。 通过使用上面的行,您将获得 contentView 视图。

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