Thomas Thomas - 5 months ago 95
Android Question

findViewByID returns null

First of all: yes, I read all the other threads on this topic. And not only those from this site... (you see, I'm a little frustrated)

Most of them come with the advice to use

android:id
instead of just
id
in the XML file. I did.

From others, I learned, that
View.findViewById
works different than
Activity.findViewById
. I handled that, too.

In my
location_layout.xml
, I use:

<FrameLayout .... >
<some.package.MyCustomView ... />

<LinearLayout ... >
<TextView ...
android:id="@+id/txtLat" />
...
</LinearLayout>
</FrameLayout>


In my Activity I do:

...
setContentView( R.layout.location_layout );


and in my custom view class:

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


which returns
null
. Doing this, my Activity works fine. So maybe it's because of the
Activity.findViewById
and
View.findViewById
differences. So I stored the context passed to the customs view constructor locally and tried:

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


which also returned
null
.

Then, I changed my custom view to extend
ViewGroup
instead
View
and changed the
location_layout.xml
to let the
TextView
be a direct child of my custom view, so that the
View.findViewById
should work as supposed. Suprise: it didn't solve anything.

So what the heck am I doing wrong?

I'll appreciate any comments.

Answer

which returns null

Possibly because you are calling it too early. Wait until onFinishInflate(). Here is a sample project demonstrating a custom View accessing its contents.

Comments