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:id
nicht nur id
in der XML-Datei zu verwenden. Ich tat.
Von anderen habe ich gelernt, dass View.findViewById
das anders funktioniert als Activity.findViewById
. Ich habe auch damit umgegangen.
In meinem location_layout.xml
benutze 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.findViewById
und View.findViewById
Unterschiede. 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 ViewGroup
stattdessen zu erweitern, View
und die so geändert location_layout.xml
, dass TextView
sie ein direktes untergeordnetes Element meiner benutzerdefinierten Ansicht ist, sodass die Ansicht View.findViewById
wie angenommen funktionieren soll. Überraschung: Es hat nichts gelöst.
Also, was zum Teufel mache ich falsch?
Ich freue mich über Kommentare.