Trước hết: có, tôi đọc tất cả các chủ đề khác về chủ đề này. Và không chỉ những người từ trang web này ... (bạn thấy đấy, tôi hơi thất vọng)
Hầu hết trong số họ đi kèm với lời khuyên để sử dụng android:idthay vì chỉ idtrong tệp XML. Tôi đã làm.
Từ những người khác, tôi học được, điều đó View.findViewByIdlàm việc khác hơn Activity.findViewById. Tôi cũng xử lý việc đó.
Trong tôi location_layout.xml, tôi sử dụng:
<FrameLayout .... >
<some.package.MyCustomView ... />
<LinearLayout ... >
<TextView ...
android:id="@+id/txtLat" />
...
</LinearLayout>
</FrameLayout>
Trong hoạt động của tôi, tôi làm:
...
setContentView( R.layout.location_layout );
và trong lớp xem tùy chỉnh của tôi:
...
TextView tv = (TextView) findViewById( R.id.txtLat );
Mà trả về null. Làm điều này, Hoạt động của tôi hoạt động tốt. Vì vậy, có lẽ đó là vì sự Activity.findViewByIdvà View.findViewByIdsự khác biệt. Vì vậy, tôi đã lưu trữ bối cảnh được chuyển đến nhà xây dựng chế độ xem hải quan tại địa phương và thử:
...
TextView tv = (TextView) ((Activity) context).findViewById( R.id.txtLat );
Mà cũng trở về null.
Sau đó, tôi đã thay đổi chế độ xem tùy chỉnh của mình để mở rộng ViewGroupthay vào đó Viewvà thay đổi location_layout.xmlđể cho phép TextViewtrở thành con trực tiếp của chế độ xem tùy chỉnh của tôi, để chế độ View.findViewByIdnày hoạt động như được cho là đúng. Bất ngờ: nó không giải quyết được gì.
Vì vậy, những gì tôi đang làm sai?
Tôi sẽ đánh giá cao bất kỳ ý kiến.