Po pierwsze: tak, przeczytałem wszystkie pozostałe wątki na ten temat. I nie tylko te z tej strony ... (widzisz, jestem trochę sfrustrowany)
Większość z nich zawiera porady, których należy używać android:id
zamiast tylko id
w pliku XML. Zrobiłem.
Nauczyłem się od innych, że View.findViewById
działa inaczej niż Activity.findViewById
. Ja też sobie z tym poradziłem.
W moim location_layout.xml
używam:
<FrameLayout .... >
<some.package.MyCustomView ... />
<LinearLayout ... >
<TextView ...
android:id="@+id/txtLat" />
...
</LinearLayout>
</FrameLayout>
W swojej działalności wykonuję:
...
setContentView( R.layout.location_layout );
i w mojej niestandardowej klasie widoku:
...
TextView tv = (TextView) findViewById( R.id.txtLat );
który zwraca null
. Dzięki temu moja aktywność działa dobrze. Więc może to ze względu na Activity.findViewById
i View.findViewById
różnic. Zapisałem więc kontekst przekazany lokalnie do konstruktora widoku celnego i próbowałem:
...
TextView tv = (TextView) ((Activity) context).findViewById( R.id.txtLat );
który również wrócił null
.
Następnie zmieniłem widoku niestandardowego rozszerzenia ViewGroup
zamiast View
i zmienił location_layout.xml
pozwolić TextView
być bezpośrednim dziecko mojego widoku niestandardowego, tak że View.findViewById
powinno działać jak przypuszczano. Zaskocz: nic nie rozwiązało.
Co do cholery robię źle?
Będę wdzięczny za wszelkie komentarze.