Làm thế nào để có được một Inflater bố trí cho một bối cảnh?


226

Tôi đang viết một triển khai tùy chỉnh của ListAd CHƯƠNG.

Trong hàm tạo của nó, tôi đang sử dụng Bối cảnh, ID tài nguyên (nghĩa là R.id.xxx đại diện cho tệp bố cục), và một danh sách và bản đồ (những thứ này chứa dữ liệu).

Bây giờ, vấn đề là tôi sẽ cần một LayoutInflater để lấy đối tượng View nằm trong tệp XML bố cục riêng.

Làm cách nào tôi có thể giữ được LayoutInflater chỉ được cung cấp Ngữ cảnh?

Bây giờ, tại sao tôi nghĩ điều này là có thể, là nó khá giống với những gì đang được truyền cho hàm tạo của ArrayAd CHƯƠNG (bối cảnh, tài nguyên, textViewResourceId, mảng dữ liệu) và tôi nghĩ rằng ArrayAd CHƯƠNG cũng phải sử dụng một LayoutInflater chỉ được cung cấp một Ngữ cảnh.

Nhưng làm thế nào nó có thể được thực hiện?

Câu trả lời:


515

Bạn có thể sử dụng static from()phương thức từ LayoutInflaterlớp :

 LayoutInflater li = LayoutInflater.from(context);

11
Cảm ơn! tôi đã cố gắng tìm Context.getS Something (). getAntherThing (). getLayoutInflater ()!
Edwin Lee

Đây là phương pháp duy nhất làm việc cho tôi. Tất cả những cái khác mà tôi đã thử cho đến nay đã ném một ngoại lệ.
num1

4
Có tốn kém để có được những người thổi phồng mỗi khi cần thiết, có nghĩa là, bạn có nghĩ rằng chúng ta nên cứu một thành viên của người thổi phồng không?
AlikElzin-kilaka

BTW tôi nghĩ rằng chúng ta nên sử dụng LayoutInflater li = (LayoutInflater) bối cảnh.getSystemService (Context.LAYOUT_INFLATER_SERVICE) vì cuối cùng là LayoutInflater.from (bối cảnh) đang hoạt động tương tự bên trong.
Ankur Chaudhary

3
Cái nào tốt hơn ?? cái nào có 270 phiếu hay cái nào có hơn 25 phiếu
DJphy

53

Bạn cũng có thể sử dụng mã này để nhận LayoutInflater:

LayoutInflater li = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE)

40
Sự khác biệt giữa LayoutInflater.from (Ngữ cảnh ctx) và getSustemService (...) này là gì?
Tèo Choong Ping

8
+1, đối với câu hỏi hay, khi triển khai phương thức LayoutInflater.from (bối cảnh) cũng gọi bối cảnh.getSystemService () để nhận Nhà cung cấp dịch vụ LayoutInflater từ Trình quản lý hệ thống. Vì vậy, có thể có một sự khác biệt rác trong ngăn xếp cuộc gọi.
Nguyễn

11
Giao diện Bố cục if (LayoutInflater == null) {ném Ass AssEEror mới ("Không tìm thấy LayoutInflater."); } trả về LayoutInflater; }
Hiệp
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.