2010-03-30 33 views
14

Giả sử tôi có một xml bố trí đơn giản như sau:thổi phồng vs findViewById

button.xml:

<Button 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/button01" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" /> 

Có bất kỳ sự khác biệt trong các cuộc gọi sau đây? và tôi nên sử dụng cái nào?

button = (Button) getLayoutInflater().inflate(R.layout.button, null); 

View v = getLayoutInflater().inflate(R.layout.button, null); 
button = (Button) v.findViewById(R.id.button01); 
+0

Rất tiếc, nó lọc mã của tôi. ở đây: Nút \t xmlns: android = "http://schemas.android.com/apk/res/android" \t android: id = "@ + id/button01" \t android: layout_width = "wrap_content" \t android: layout_height = "wrap_content" –

Trả lời

1

Tùy chọn đầu tiên là sạch và hơi hiệu quả hơn.

Lưu lượng truy cập bố cục của bạn sẽ trả lại Button. Với tùy chọn đầu tiên, bạn truy cập trực tiếp vào số Button. Với tùy chọn thứ hai, bạn truyền nút xuống số View và sau đó tìm kiếm chế độ xem có ID nhất định, đây là một so sánh vô dụng, vì chế độ xem có ID bạn đang tìm kiếm trong cấu trúc phân cấp sẽ là nút chinh no. Vì vậy, trong tùy chọn thứ hai, v == button.

13

Điều này tạo ra một chế độ xem mới với bố cục đã cho nơi 'R.layout.button' được tạo bằng tên của tệp xml 'button.xml'. Mỗi lần bạn gọi .inflate (...), bạn sẽ nhận được một cá thể mới.

View v = getLayoutInflater().inflate(R.layout.button, null); 

-

Trong khi đó người ta tìm thấy một cái nhìn hiện trong một bố trí nơi R.id.button01 được tạo ra bởi các tên id 'android: id = "@ + id/button01"'. Mỗi khi bạn gọi .findViewById (R.id.button01), bạn sẽ nhận được cùng một cá thể vì khung nhìn 'v' sẽ giống nhau.

button = (Button) v.findViewById(R.id.button01); 
Các vấn đề liên quan