findViewByID返回null
首先:是的,我阅读了关于此主题的所有其他主题。 不仅仅是来自这个网站的人(你看,我有点沮丧)
他们中的大多数都与建议使用android:id
,而不是仅仅id
的XML文件英寸 我做到了。
从其他人那里,我了解到, View.findViewById
与Activity.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.findViewById
和View.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