findViewByID返回null

首先:是的,我阅读了关于此主题的所有其他主题。 不仅仅是来自这个网站的人(你看,我有点沮丧)

他们中的大多数都与建议使用android:id ,而不是仅仅id的XML文件英寸 我做到了。

从其他人那里,我了解到, View.findViewByIdActivity.findViewById不同。 我也是这样处理的。

在我的location_layout.xml ,我使用:

<FrameLayout .... >
    <some.package.MyCustomView ... />

    <LinearLayout ... >
        <TextView ...
            android:id="@+id/txtLat" />
        ...
    </LinearLayout>
</FrameLayout>

在我的活动中,我这样做:

...
setContentView( R.layout.location_layout );

并在我的自定义视图类:

... 
TextView tv = (TextView) findViewById( R.id.txtLat );

它返回null这样做,我的活动工作正常。 所以也许是因为Activity.findViewByIdView.findViewById不同。 所以我将本地传递给海关视图构造函数的上下文存储起来并尝试:

...
TextView tv = (TextView) ((Activity) context).findViewById( R.id.txtLat );

其中也返回null

然后,我改变了我的自定义视图来扩展ViewGroup而不是View并更改了location_layout.xml以让TextView成为我的自定义视图的直接子View.findViewById ,以便View.findViewById能够按预期工作。 惊喜:它没有解决任何问题。

那么我做错了什么?

我会很感激任何意见。


它返回null

可能是因为你称它为时尚早。 等到onFinishInflate() 。 这是一个示例项目,演示访问其内容的自定义View


可能的是,您在调用setContentView之前调用findViewById ? 如果是这种情况,请尝试在调用setContentView 之后调用findViewById


确保你没有多个版本的布局以适应不同的屏幕密度。 在向现有布局添加新的ID时,我遇到过这个问题,但忘记更新hdpi版本。 如果您忘记更新布局文件的所有版本,它将适用于某些屏幕密度,但不适用于其他屏幕密度。

链接地址: http://www.djcxy.com/p/68005.html

上一篇: findViewByID returns null

下一篇: multiple activities or switching views manually?