Zuallererst: Ja, ich habe alle anderen Themen zu diesem Thema gelesen. Und nicht nur die von dieser Seite ... (Sie sehen, ich bin ein wenig frustriert)
Die meisten von ihnen haben den Rat, sie android:idnicht nur idin der XML-Datei zu verwenden. Ich tat.
Von anderen habe ich gelernt, dass View.findViewByIddas anders funktioniert als Activity.findViewById. Ich habe auch damit umgegangen.
In meinem location_layout.xmlbenutze ich:
<FrameLayout .... >
<some.package.MyCustomView ... />
<LinearLayout ... >
<TextView ...
android:id="@+id/txtLat" />
...
</LinearLayout>
</FrameLayout>
In meiner Tätigkeit mache ich:
...
setContentView( R.layout.location_layout );
und in meiner benutzerdefinierten Ansichtsklasse:
...
TextView tv = (TextView) findViewById( R.id.txtLat );
was zurückkehrt null. Dabei funktioniert meine Aktivität einwandfrei. So ist es vielleicht wegen der Activity.findViewByIdund View.findViewByIdUnterschiede. Also habe ich den Kontext, der an den Konstruktor der Zollansicht übergeben wurde, lokal gespeichert und versucht:
...
TextView tv = (TextView) ((Activity) context).findViewById( R.id.txtLat );
was auch zurückkehrte null.
Dann habe ich meine benutzerdefinierte Ansicht geändert, um sie ViewGroupstattdessen zu erweitern, Viewund die so geändert location_layout.xml, dass TextViewsie ein direktes untergeordnetes Element meiner benutzerdefinierten Ansicht ist, sodass die Ansicht View.findViewByIdwie angenommen funktionieren soll. Überraschung: Es hat nichts gelöst.
Also, was zum Teufel mache ich falsch?
Ich freue mich über Kommentare.