首先:是的,我阅读了有关该主题的所有其他主题。不仅是来自该站点的那些...(你看,我有点沮丧)
他们中的大多数人都建议在 XML 文件中使用 android:id
而不仅仅是 id
。我做到了。
我从其他人那里了解到,View.findViewById
与 Activity.findViewById
的工作方式不同。我也处理过。
在我的 location_layout.xml
中,我使用:
<FrameLayout .... >
<some.package.MyCustomView ... />
<LinearLayout ... >
<TextView ...
android:id="@+id/txtLat" />
...
</LinearLayout>
</FrameLayout>
在我的 Activity 中我会:
...
setContentView( R.layout.location_layout );
在我的自定义 View 类中:
...
TextView tv = (TextView) findViewById( R.id.txtLat );
返回 null
。 这样做,我的 Activity 工作正常。所以可能是因为 Activity.findViewById
和 View.findViewById
的差异。所以我将传递给海关 View 构造函数的上下文存储在本地并尝试:
...
TextView tv = (TextView) ((Activity) context).findViewById( R.id.txtLat );
它也返回了 null
。
然后,我更改了我的自定义 View 以扩展 ViewGroup
而不是 View
并更改了 location_layout.xml
以让 TextView
是我的自定义 View 的直接子项,因此 View.findViewById
应该按预期工作。惊奇:它没有解决任何问题。
那我究竟做错了什么?
如有任何意见,我将不胜感激。
最佳答案
which returns null
可能是因为您调用得太早了。等到 onFinishInflate()
。 Here is a sample project演示自定义 View
访问其内容。
关于android - findViewByID 返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58078242/