首先:是的,我阅读了有关该主题的所有其他主题。不仅是这个网站上的网站...(您看到的,我有些沮丧)

他们中的大多数人都建议在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.findViewByIdView.findViewById的差异。因此,我将传递给上下文的上下文存储在本地的海关视图构造函数中并尝试:

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


也返回了null

然后,我将自定义视图更改为扩展ViewGroup而不是View,并更改了location_layout.xml以使TextView作为我的自定义视图的直接子代,以便View.findViewById可以按预期工作。惊喜:它什么也没解决。

那么,我到底在做什么错呢?

我将不胜感激。

最佳答案

返回null


可能是因为您为时过早。等到onFinishInflate()Here is a sample project演示自定义View访问其内容。

关于android - findViewByID返回null,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57592075/

10-12 03:51