ก่อนอื่น: ใช่ฉันอ่านกระทู้ทั้งหมดในหัวข้อนี้ และไม่เพียง แต่จากเว็บไซต์นี้ ... (คุณเห็นฉันผิดหวังเล็กน้อย)
ส่วนใหญ่มีคำแนะนำให้ใช้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ทำงานได้ตามควร แปลกใจ: มันไม่ได้แก้อะไรเลย
แล้วฉันจะทำยังไงดี
ฉันจะขอบคุณความคิดเห็นใด ๆ