Tôi có thể sử dụng cùng một id trong bố cục khác nhau trong Android không?


90

Tôi là người mới phát triển Android. Sử dụng cùng một ID cho các hình ảnh và TextViewscác Layouttệp XML khác nhau có tốt không?

Khi eclipse tự động liệt kê chúng cho tôi, nó sẽ liệt kê tất cả các biến bố cục từ dự án, vậy liệu nó có va chạm không? Cho đến bây giờ tôi không nhận thấy bất kỳ vấn đề nào khi sử dụng cùng một ID trong các bố cục khác nhau, nhưng tôi lo ngại về lâu dài.



@Pavel, bạn sẽ vẫn cần id để điều chỉnh các ràng buộc.
Sadda Hussain

Câu trả lời:


96

Bạn nên sử dụng các id khác nhau cho các bố cục khác nhau. Về lâu dài, khi bạn có rất nhiều bố cục và có nhiều id thì việc phân biệt chúng sẽ rất phức tạp.

Tôi thường đặt tên id của tôi như thế này: layoutName_elementId.

Nó hoạt động để tôi dễ dàng tìm thấy id tôi đang tìm kiếm, đặc biệt là khi sử dụng tính năng tự động điền (tôi biết tôi đang làm việc trên bố cục nào, nhưng tôi không thực sự biết id; trong trường hợp này, với chiến lược đặt tên của mình, tôi chỉ nhập tên bố cục và nó mang trên tất cả các id của bố cục đó).

Có thể tìm thấy thêm thông tin về bố cục và id tại đây .

Chúc bạn viết mã vui vẻ,


2
Vấn đề của việc tìm kiếm chúng ta hãy nói ok_buttontrong mọi hoạt động của bạn là gì? Tính năng tự động hoàn thành thậm chí còn rõ ràng hơn theo cách đó nếu bạn biết cuộc trò chuyện mà bạn đang tìm kiếm.
Dan Chaltiel

132

Câu trả lời ngắn gọn: Có, bạn có thể.

Câu trả lời dài: Bạn có thể làm điều này bởi vì bất cứ khi nào bạn sử dụng findViewById () để nhận tham chiếu đến một phần của bố cục, phương thức chỉ tìm kiếm dạng xem đó trong bố cục hiện đang tăng cao. Vì vậy, ngay cả khi bạn có một chế độ xem khác với cùng một ID trong một bố cục khác, Android sẽ không tìm kiếm nó ở đó.


15
Bạn có thể đưa ra một câu trả lời thậm chí còn dài hơn? Bởi vì R.id.layout_id là một số nguyên tĩnh và được xác định trước tại thời điểm biên dịch, vì vậy findViewById () sẽ không biết bố cục hiện đang tăng cao.
Chloe

22
Vì lợi ích của bất kỳ ai khác gặp phải câu hỏi này, tôi muốn trả lời yêu cầu của Chloe. ID sẽ giống nhau cho mỗi chế độ xem, nhưng sẽ không bao giờ xuất hiện hai lần trong cùng một hoạt động. Như một phép ẩn dụ, hãy xem điều gì sẽ xảy ra nếu tôi đưa cho bạn một xấp giấy, tất cả đều có một loạt các con số trên đó. Một vài trong số những tờ giấy này có viết số 4 trên chúng. Bạn đang xem một trong các trang tính, và tôi yêu cầu bạn khoanh tròn 4. Điều này rất dễ dàng. Bây giờ bạn nhìn vào một trang tính khác có số 4 trên đó. Bạn cũng có thể tìm và khoanh tròn điều đó. Không quan trọng là con số được xác định trước.
Ted Cannelongo

6
Tôi không đồng ý với nhận xét của Ted, bạn có thể có cùng lúc hai thành phần có cùng ID chạy trên cùng một Hoạt động. Tôi vừa gặp sự cố trên một ứng dụng, tôi đang sử dụng hai ViewPager khác nhau cùng lúc trong hoạt động chính. Khi tôi cố gắng truy xuất ViewPager hiện được hiển thị cùng với ID, nó thực sự truy xuất cái khác đang chạy trong nền. Tôi đã khắc phục sự cố bằng cách chỉ cần đặt hai ID là duy nhất.
Yoann Hercouet

8
@YoannHercouet Tôi tin rằng điều này là do cả hai đều trên bảng cùng (Hoạt động)
Naheel

22

Theo hướng dẫn API dành cho nhà phát triển:

Một ID không cần phải là duy nhất trong toàn bộ cây, nhưng nó phải là duy nhất trong phần của cây mà bạn đang tìm kiếm (thường có thể là toàn bộ cây, vì vậy tốt nhất là hoàn toàn duy nhất khi có thể).

Vì vậy, câu trả lời ngắn gọn là nó không bắt buộc nhưng đó là một cách thực hành tốt để tránh xung đột có thể xảy ra.


1
Tôi đã từng vô tình tạo ra các id giống nhau. Việc bỏ đổi tên chúng sau đó là rất nhiều công việc vì tất cả các phiên bản đều đã được đổi tên. Điều này có nghĩa là một khi bạn có xung đột id, bạn sẽ gặp rắc rối. Sẽ rất khó để tách mọi thứ trở lại một lần nữa.
t3chb0t

@ t3chb0t Là thật! Ngay cả khi bạn chọn "chỉ cục bộ", Android Studio sẽ đổi tên tất cả các phiên bản. Nó hoàn toàn vô lý.
John Glen

15

Không nên vì nếu trong tương lai bạn cần phải cấu trúc lại view id, Android studio sẽ cấu trúc lại nó trong tất cả XMLcác tệp và lớp và bạn sẽ gặp rắc rối.

Nhưng cũng có một số trường hợp khi bạn cần sử dụng cùng một idví dụ như nếu bạn có một số tóm tắt và bạn sử dụng lại nhiều bố cục.

Trong trường hợp bạn có nhiều cái viewsgiống nhau id'strong dự án của mình và bạn cần cấu trúc lại, hãy làm điều đó theo cách thủ công, không sử dụng chức năng xây dựng trong IDE, thay đổi idchế độ xem mục tiêu bên trong XMLbố cục sau đó sửa lỗi màu đỏ bên trong bố cục.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.