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:id
thay vì chỉ id
trong tệp XML. Tôi đã làm.
Từ những người khác, tôi học được, điều đó View.findViewById
là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.findViewById
và View.findViewById
sự 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 ViewGroup
thay vào đó View
và thay đổi location_layout.xml
để cho phép TextView
trở thành con trực tiếp của chế độ xem tùy chỉnh của tôi, để chế độ View.findViewById
nà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.