2012-01-23 28 views
10

Tôi đang phát triển Hoạt động với phần bố cục cố định và năng động. Phần năng động (và do đó số lượng và loại widget được tạo) dựa trên các giá trị cơ sở dữ liệu theo cách này: Đối với mỗi hàng cơ sở dữ liệu, tôi sẽ có một nhóm các tiện ích. Và các thành phần của mỗi nhóm phụ thuộc vào kiểu đối tượng (được xác định từ một trong các cột) của hàng cơ sở dữ liệu đó.Phạm vi số an toàn cho ID của riêng tôi trong bố cục động?

Để lưu/khôi phục trạng thái mẫu, tất cả tiện ích cần có ID. Tôi muốn đảm bảo rằng các ID của riêng tôi sẽ không bao giờ xung đột với các ID từ lớp R được tạo ra.

Để xử lý tốt hơn trong ứng dụng (tìm bản đồ tiện ích cho trường nào trong đó đối tượng dữ liệu), lược đồ đánh số như ID = hàng * 100 + fieldindex sẽ hữu ích. Fieldindex không chính xác là số colum. Mỗi loại đối tượng cần phải có các fieldindices riêng của nó.

Vì giá trị ID trong R được tạo dường như không có số liên tiếp, tôi không thể chỉ định trước một nhóm ID trong R và sử dụng chúng mà không cần ánh xạ bổ sung. Lý do thứ hai đối với một nhóm được xác định trước: Số lượng lớn các fieldindices sẽ dẫn đến một nhóm ID lớn. Thứ ba, kích thước của nhóm ID sẽ giới hạn số lượng hàng có thể được hiển thị.

Có dải số an toàn nào tôi có thể sử dụng cho ID của thành phần bố cục của riêng mình không? Nhìn vào R.java trong gen/thư mục, tôi có ấn tượng rằng các ID được tạo ra đều lớn hơn 0x7f000000. Điều đó có được đảm bảo không? Và nếu có, phạm vi từ 0x00000000 lên đến 0x7f000000 miễn phí để sử dụng hoặc là nó dành riêng cho mục đích nội bộ của android?

+0

chào mừng bạn đến stackoverflow. Câu hỏi hay, hãy đọc Câu hỏi thường gặp. Chúng tôi cố gắng tránh "cảm ơn" và chữ ký không được phép. – vidstige

+0

+1 câu hỏi thú vị. Có vẻ như Android sử dụng nội bộ [0x1f trở lên] (http://developer.android.com/reference/android/R.id.html#addToDictionary) và các dự án/libs sử dụng 0x7f trở đi. –

Trả lời

2

Tại sao bạn muốn tránh cùng một id? Chỉ điều cần thiết là: An ID need not be unique throughout the entire tree, but it should be unique within the part of the tree you are searching. Vì vậy, bạn có thể sử dụng công thức của bạn

ID = hàng * 100 + fieldindex

tôi sẽ làm việc tốt, ngay cả khi nó không phải là duy nhất trong dự án.

+0

Ah, đó là một thông tin rất thú vị. Nhưng vẫn còn một điều mà tôi không chắc chắn về: Tôi không phải là người duy nhất tìm kiếm bố cục của tôi. Theo như tôi hiểu tài liệu, Android sẽ chăm sóc lưu/khôi phục tất cả trạng thái của tiện ích con bằng một ID duy nhất (duy nhất trong toàn bộ bố cục). Và tôi không chắc liệu có một số ID nội bộ ẩn cho các thành phần mà tôi đã xác định mà không chỉ định chúng ID (nhãn, miếng đệm, v.v.) hay không. Android có gán ID nội bộ cho họ không? Nếu có, tôi nghĩ rằng tôi phải đảm bảo rằng họ không xung đột với ID của tôi. –

+0

id của một khung nhìn được khởi tạo như sau: 'int mID = NO_ID;' NO_ID là -1, và nó được giữ như thế này. Vì vậy, nếu bạn tạo một thành phần lập trình và không gán cho nó một id, nó không có một id (và do đó trạng thái của nó, nếu có, sẽ không được khôi phục tự động) – ChristophK

Các vấn đề liên quan