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