【发布时间】:2011-03-16 22:18:39
【问题描述】:
首先:是的,我阅读了有关该主题的所有其他主题。不仅是来自这个网站的那些......(你看,我有点沮丧)
他们中的大多数都建议在 XML 文件中使用 android:id 而不仅仅是 id。我做到了。
我从其他人那里了解到,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 工作正常。所以可能是因为 Activity.findViewById 和 View.findViewById 的差异。所以我将传递给海关视图构造函数的上下文存储在本地并尝试:
...
TextView tv = (TextView) ((Activity) context).findViewById( R.id.txtLat );
这也返回了null。
然后,我将自定义视图更改为扩展ViewGroup 而不是View 并更改location_layout.xml 以让TextView 成为我自定义视图的直接子级,以便View.findViewById 应该按预期工作.惊喜:它没有解决任何问题。
那我到底做错了什么?
我将不胜感激。
【问题讨论】:
-
如果项目也损坏了,可能会发生这种情况。我通过清理项目来修复它
-
通过错误的上下文视图谢谢
-
@Pacerier 谢谢。这解决了我的问题。我开始讨厌 Xamarin 中的 android 编程)
-
@Pacerier "Clean project" 也解决了我的问题。看来 Dropbox 破坏了项目。
标签: android android-view