Tôi là người mới đối với Kotlin. Trong số những thứ rất thú vị khác, tôi đã tìm thấy các tiện ích mở rộng Android, according to the documentation, nên cho phép tôi sử dụng chế độ xem của hoạt động mà không cần findViewById
.Thuộc tính tổng hợp của Kotlin xung đột
Trên thực tế nó hoạt động rất tốt bằng cách thêm chỉ dòng này nhập khẩu của tôi:
import kotlinx.android.synthetic.main.<layout>.*
Vấn đề là khi hai bố trí khác nhau chứa một widget với cùng id (tức là cùng tên cho các tài sản tổng hợp),
ví dụ hai khác nhau TextView
s với id txtTitle
. Giả sử cái đầu tiên là một hoạt động và cái thứ hai thuộc về bố trí được sử dụng bên trong bộ điều hợp.
Khi tôi cố gắng gọi một phương thức trên TextView đầu tiên (hoạt động của nó), tôi không thể thấy kết quả mong đợi, như thể cuộc gọi sẽ được thực hiện trên một chế độ xem khác. Khi xác nhận điều này, khi tôi gọi số txtTitle.parent
, tôi thấy phụ huynh và anh chị em của số khác txtTitle
thay vì số tiền được mong đợi.
Tôi có làm gì sai không? Cách duy nhất mà tôi đã tìm thấy để bỏ qua vấn đề này là sử dụng tên gọi khác nhau trong tất cả các bố trí của tôi hoặc tiếp tục sử dụng findViewById
, nhưng nó sẽ là một điều đáng tiếc để lãng phí năng ngôn ngữ này ...
Tôi muốn khuyên bạn nên sử dụng tên phức tạp hơn cho ID của bạn :) Nó cũng ngăn không cho "chơi" với các lần nhập trong trường hợp của tôi. – UneXp
Không chắc chắn nếu điều này trả lời câu hỏi của bạn, nhưng các cuộc gọi tổng hợp được dịch sang các cuộc gọi đến 'findviewById' và bởi vì mọi id ** tên ** được ánh xạ tới một giá trị duy nhất, nó không quan trọng * * nhập khẩu bạn sử dụng càng lâu khi bạn sử dụng tên với tên chính xác. –
Tôi tưởng tượng, nhưng thực sự nó đang làm việc xấu. Tôi có một hoạt động với một txtTitle, bên trong của hoạt động này có một đoạn với RecyclerView: bên trong RecyclerView có các khung nhìn với một txtTitle.Tôi chỉ nhìn thấy những gì tôi đã viết: khi tôi sử dụng txtTitle bên trong của hoạt động nó không tạo ra kết quả mong đợi (nó không đặt văn bản của TextView); thay vào đó, nếu tôi sử dụng findViewById() từ hoạt động, nó hoạt động chính xác ... – Massimo