ก่อนอื่น: ใช่ฉันอ่านกระทู้ทั้งหมดในหัวข้อนี้ และไม่เพียง แต่จากเว็บไซต์นี้ ... (คุณเห็นฉันผิดหวังเล็กน้อย)
ส่วนใหญ่มีคำแนะนำให้ใช้android:id
แทนid
ไฟล์ XML ฉันทำ.
จากคนอื่น ๆ ผมได้เรียนรู้ว่าการทำงานที่แตกต่างกันมากกว่าView.findViewById
Activity.findViewById
ฉันจัดการสิ่งนั้นด้วย
ในตัวฉันlocation_layout.xml
ฉันใช้:
<FrameLayout .... >
<some.package.MyCustomView ... />
<LinearLayout ... >
<TextView ...
android:id="@+id/txtLat" />
...
</LinearLayout>
</FrameLayout>
ในกิจกรรมของฉันฉันทำ:
...
setContentView( R.layout.location_layout );
และในคลาสมุมมองที่กำหนดเองของฉัน:
...
TextView tv = (TextView) findViewById( R.id.txtLat );
null
ซึ่งผลตอบแทน การทำเช่นนี้กิจกรรมของฉันทำงานได้ดี ดังนั้นอาจจะเป็นเพราะการActivity.findViewById
และView.findViewById
ความแตกต่าง ดังนั้นฉันจึงเก็บบริบทที่ส่งผ่านไปยังตัวสร้างมุมมองศุลกากรภายในเครื่องและลอง:
...
TextView tv = (TextView) ((Activity) context).findViewById( R.id.txtLat );
null
ซึ่งก็กลับมา
จากนั้นฉันเปลี่ยนมุมมองที่กำหนดเองของฉันเพื่อขยายViewGroup
แทนView
และเปลี่ยนเป็นlocation_layout.xml
ปล่อยให้TextView
เป็นลูกโดยตรงของมุมมองที่กำหนดเองของฉันเพื่อให้View.findViewById
ทำงานได้ตามควร แปลกใจ: มันไม่ได้แก้อะไรเลย
แล้วฉันจะทำยังไงดี
ฉันจะขอบคุณความคิดเห็นใด ๆ