2010-09-27 22 views
7

Tôi có bố cục xml sẽ hiển thị lưới được tạo thành từ các bản xem trước văn bản trong tablerows. Tên văn bản là cell00, cell01, v.v. Khi chạy, chương trình của tôi sẽ xác định ô nào cần được thay đổi.Cách tạo findViewById parm động hoặc lập trình tại thời gian chạy

Có cách nào nhận định dạng tên để nó có thể được chuyển sang phương thức findViewById khi chạy không? Ví dụ, nếu cell00 là cần thiết, làm thế nào tôi có thể tạo ra parm trong mã này?

TextView currcell = (TextView) findViewById(R.id.cell00) 

Nội dung như “ô” không biên dịch vì phương thức findViewById không chấp nhận loại Chuỗi. Tôi không muốn có mọi tên trong chế độ xem văn bản trong lưới được mã hóa cứng trong chương trình - phải có cách tốt hơn.

Cảm ơn bạn vì bất kỳ trợ giúp nào bạn có thể cung cấp.

+0

chỉ tò mò những gì bạn đang cố gắng thực hiện bằng cách sử dụng chế độ xem bảng trên chế độ xem lưới? – schwiz

+0

Ứng dụng đơn giản đầu tiên này sẽ hiển thị giải pháp câu đố ô chữ. Cách duy nhất tôi biết làm thế nào để làm cho lưới là với textviews bên trong tablerows. Chế độ xem văn bản cho phép tôi nhập dữ liệu vào từng ô và thậm chí sử dụng HTML để nhận các tính năng nhất định. Tôi đã cố gắng tìm hiểu cách thức các câu đố ô chữ chuyên nghiệp được thực hiện, nhưng cuối cùng chấp nhận thất bại và đã bỏ cuộc. Tôi chắc rằng những người khác sử dụng một phương pháp tốt hơn so với tôi. Tôi thực sự muốn tôi biết làm thế nào để thực hiện một mẫu lưới tìm kiếm thực sự tốt đẹp. – greenset

+0

@schwiz Một lý do để sử dụng bố cục bảng thay vì chế độ xem lưới, là nếu bạn cần số lượng mục cụ thể trong mỗi hàng. Chế độ xem lưới chỉ bao bọc nội dung ở cuối mỗi hàng, vì vậy số liên tiếp sẽ thay đổi dựa trên kích thước màn hình, v.v. –

Trả lời

4

Bạn có thể sử dụng phản chiếu để tìm giá trị số nguyên của biến được đặt tên trong R.id.

Class clazz = R.id.class; 
Field f = clazz.getField("cell" + "00"); 
int id = f.getInt(null); // pass in null, since field is a static field. 
TextView currcell = (TextView) findViewById(id); 

Hãy nhớ rằng phản ánh có thể chậm. Nếu bạn làm điều đó rất nhiều, bạn có thể muốn lưu các giá trị bộ nhớ cache hoặc tìm ra một cách khác.

+0

Rất hữu ích. Tôi thực sự đánh giá cao thời gian của bạn. Tôi đã nhập mã và nhận được một biên dịch sạch sẽ. Tôi nên đến trang web này vài tuần trước. – greenset

3
int id = getResources().getIdentifier("cell00", "id", getPackageName()); 
TextView currcell = (TextView) findViewById(id); 

Giống như cách thức của Mayra, mã cũng sử dụng sự phản chiếu, vì vậy hãy cẩn thận.

+0

Ty cho đề xuất. Tôi đang thử cả hai cách để xem cái nào phù hợp nhất với nhu cầu của tôi. – greenset

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