Pertama-tama: ya, saya membaca semua utas lainnya tentang topik ini. Dan bukan hanya mereka yang berasal dari situs ini ... (Anda lihat, saya sedikit frustrasi)
Sebagian besar dari mereka datang dengan saran untuk digunakan, android:idbukan hanya iddalam file XML. Aku melakukannya.
Dari yang lain, saya belajar, itu View.findViewByIdbekerja berbeda dari Activity.findViewById. Saya menanganinya juga.
Di saya location_layout.xml, saya menggunakan:
<FrameLayout .... >
<some.package.MyCustomView ... />
<LinearLayout ... >
<TextView ...
android:id="@+id/txtLat" />
...
</LinearLayout>
</FrameLayout>
Dalam Aktivitas saya, saya lakukan:
...
setContentView( R.layout.location_layout );
dan di kelas tampilan khusus saya:
...
TextView tv = (TextView) findViewById( R.id.txtLat );
yang kembali null. Melakukan ini, Aktivitas saya berfungsi dengan baik. Jadi mungkin itu karena Activity.findViewByIddan View.findViewByIdperbedaan. Jadi saya menyimpan konteks yang diteruskan ke konstruktor tampilan pabean secara lokal dan mencoba:
...
TextView tv = (TextView) ((Activity) context).findViewById( R.id.txtLat );
yang juga dikembalikan null.
Kemudian, saya mengubah tampilan kustom saya untuk memperpanjang ViewGroupbukan Viewdan mengubah location_layout.xmluntuk membiarkan TextViewmenjadi anak langsung dari tampilan kustom saya, sehingga View.findViewByIdharus bekerja sebagai seharusnya. Mengejutkan: itu tidak menyelesaikan apa pun.
Jadi apa yang saya lakukan salah?
Saya akan menghargai komentar Anda.