2012-03-10 44 views
17

Ai/Cuộc gọi nào trênFinishInflate()? Không có vấn đề làm thế nào tôi thổi phồng các tập tin bố trí của tôi (trong mã) phương pháp này dường như không bao giờ được kích hoạt. Bất cứ ai có thể cho tôi một ví dụ hoặc cho tôi biết khi onFinishInflate() thực sự được gọi là?onFinishInflate() không bao giờ được gọi là

Trả lời

30

View.onFinishInflate() được gọi sau khi xem (và con của nó) được tăng cao từ XML. Cụ thể, trong khi gọi đến LayoutInflater.inflate(...), onFinishInflate() sẽ được gọi. Lạm phát được thực hiện đệ quy, bắt đầu từ gốc. Một cái nhìn có chứa trẻ em có thể cần phải biết khi trẻ em của nó đã hoàn thành được thổi phồng. Một trong những cách sử dụng chính của cuộc gọi lại này là dành cho ViewGroups để thực hiện các hành động đặc biệt khi con của nó đã sẵn sàng.

Giả sử bạn có một lớp con của View được gọi là CustomView và rằng nó không tự động tăng lên bất kỳ bố cục nào. Nếu bạn đã có một nơi CustomView trong cách bố trí của bạn, ví dụ:

... 
<com.company.CustomView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" /> 
... 

Bạn sẽ thấy một callback để onFinishInflate() khi nó đã được thổi phồng. Nếu đây là bố cục chính của hoạt động của bạn, thì bạn có thể xem xét việc này sau khi gọi Activity.setContentView(int). Nội bộ, điều này sẽ gọi LayoutInflater.inflate(...).

Ngoài ra, nếu bạn đã tạo một thể hiện của CustomView với:

... 
new CustomView(context); 
... 

... bạn sẽ không nhận được một cuộc gọi đến onFinishInflate(). Việc khởi tạo nó theo cách này sẽ tự nhiên có nghĩa là nó không có con và do đó nó không phải chờ cho chúng được khởi tạo theo kiểu đệ quy, như trong lạm phát XML.

+6

Vì vậy, tài liệu sai. Nếu bạn thổi phồng bố cục theo cách thủ công, gọi lại không được gọi. Nhưng bạn vẫn có thể gọi nó theo cách thủ công để đồng nhất. – Snicolas

+0

Bạn không thể tự gọi phương thức này. Đó là một phương pháp được bảo vệ ... bạn sẽ cần một lớp được bảo vệ. Nhận thấy rằng có nó trong gói 'android.view' không hoạt động. –

+2

Điều đó không đúng, bạn có thể gọi 'super.onFinishInflate' hoặc 'onFinishInflate' bị ghi đè trong hàm tạo. – GLee

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