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:id
bukan hanya id
dalam file XML. Aku melakukannya.
Dari yang lain, saya belajar, itu View.findViewById
bekerja 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.findViewById
dan View.findViewById
perbedaan. 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 ViewGroup
bukan View
dan mengubah location_layout.xml
untuk membiarkan TextView
menjadi anak langsung dari tampilan kustom saya, sehingga View.findViewById
harus bekerja sebagai seharusnya. Mengejutkan: itu tidak menyelesaikan apa pun.
Jadi apa yang saya lakukan salah?
Saya akan menghargai komentar Anda.