2012-09-17 24 views
5

Tôi tự hỏi liệu có ai có thể khoe một số thông tin chi tiết về cách thực hành tốt nhất để tự động tạo điều khiển (thổi phồng vs khởi tạo) hay không.Tốt hơn để thổi phồng hoặc khởi tạo các điều khiển trong Android?

Inflate:

TextView styledText = (TextView)inflater.inflate(R.layout.styledTextView); 

nhanh chóng:

TextView styledText = new TextView(mContext); 
styledText.setTextAppearance(R.style.StyledTextStyle); 

Đối tượng được tạo ra hoặc có thể chứa các thuộc tính trong file XML thổi phồng, hoặc được chứa trong một định nghĩa kiểu đó được bổ sung vào đối tượng cụ thể sau đó. (Giả sử rằng kiểu dáng này bao gồm chiều rộng, nền, màu văn bản, v.v.).

Đã không thể chạy bất kỳ kiểm tra thời gian/bộ nhớ nào của từng phương pháp, đã tự hỏi liệu có ai biết nhanh nhất/hiệu quả nhất không.

+0

một lưu ý thú vị. trong khi phương thức xuất hiện văn bản sẽ hoạt động với TextViews, nó sẽ không có chế độ xem không phải văn bản (Buttons, LinearLayouts, v.v.). – Adam

Trả lời

10

Bố cụcInflator có một chi tiết nhẹ vì nó phải phân tích cú pháp xml để tạo đối tượng. Nó cũng tạm thời mất nhiều bộ nhớ hơn cho cùng một lý do. Khác hơn thế, nó xây dựng đối tượng View theo cùng cách mà bạn sẽ làm. Nó có thể là một cái gì đó để lo lắng về nếu bạn gọi nó hàng trăm lần một giây vì lý do nào đó. 99,9% thời gian mặc dù bạn sẽ không bao giờ biết sự khác biệt.

Cũng cần lưu ý rằng bất kỳ phương thức nào chấp nhận tài nguyên xml như "setTextAppearance" sẽ có cùng chi phí phân tích cú pháp xml. Sự khác biệt duy nhất trong các ví dụ bạn cung cấp là nó không phân tích cú pháp TextView xml, nhưng nó vẫn sẽ phải phân tích cú pháp các thuộc tính kiểu.

0

Mặc dù bài đăng này hỏi về kiểm soát cụ thể, tôi nghĩ rằng nó có liên quan để lưu ý rằng .. để làm việc với bố cục bạn muốn tự động tạo/thêm, tôi tìm thấy bằng cách sử dụng phương pháp new (aka instantiate), I không có thể lấy tham chiếu đến phần tử ImageButton bên trong đã được xác định trong tệp xml mà tôi khởi tạo tham chiếu đối tượng bố cục.

Khi tôi sử dụng phương pháp inflate, ImageButton đã xuất hiện khi tham chiếu.

Vì vậy, trong trường hợp của tôi:

trình :)

LayoutInflater inflater = LayoutInflater.from(getActivity()); 
    CardView myCardView = (CardView) inflater.inflate(R.layout.my_cardview, null); 
    ImageView icon = (ImageView) myCardView.findViewById(R.id.iconId); 

~~~~~~~~~~~~

Đừng làm việc :(.. biến biểu tượng là null trong trường hợp này

CardView myCardView = new Ca rdView (getActivity());

ImageView icon = (ImageView) myCardView.findViewById (R.id.iconId);

+1

Giả sử rằng CardView không phải là chế độ xem tùy chỉnh mà bạn đã tạo. Tôi đoán đó là lý do tại sao phương pháp thứ hai của bạn không thể truy xuất biểu tượng. Bố trí của bạn có biểu tượng bên trong nó, và inflater tạo ra nó, và cách tiếp cận thứ hai bạn chỉ tạo ra một CardView trống. Chỉ để lại một bình luận cho bất cứ ai tình cờ trong câu hỏi này trong tương lai. – LeoFarage

+0

Giả sử rằng CardView không phải là chế độ xem tùy chỉnh mà bạn đã tạo. Tôi đoán đó là lý do tại sao phương pháp thứ hai của bạn không thể truy xuất biểu tượng. Bố trí của bạn có biểu tượng bên trong nó, và inflater tạo ra nó, và cách tiếp cận thứ hai bạn chỉ tạo ra một CardView trống. Chỉ để lại một bình luận cho bất cứ ai tình cờ trong câu hỏi này trong tương lai. – LeoFarage

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