public View inflate(int resource, ViewGroup root)
這個Inflater裡的函數非常有趣!
「ViewGroup root」帶Null或帶參數...對「int resource」解析的結果會完全不同!
剛剛同事花了半天才發現如果帶「ViewGroup root」,其實回傳的是這個「ViewGroup root」。
一般情況下這沒什麼,但如果「int resource」最外層的ViewGroup是個設計者自行設計的Layout類別,結果Inflater會忽略這個類別,然後只把「int resource」內的ChildView解析出來、加入「ViewGroup root」中。
會不會有點繞口?
詳細一點說明,如果設計者自行設計了一個LinearLayoutA,並且將它用在XML中,而且是包在檔案最外層。
如果帶了個「ViewGroup root」給Inflater,則Inflater會跳過這個LinearLayoutA的XML不去解析。
如果真是這樣,可以做個實驗.......
XML檔最外層是個FrameLayout,但「ViewGroup root」卻是個LinearLayout。
則用一個「FrameLayout frameLayout」參數去接收Inflater的回傳時,肯定會出錯............
等等做實驗!
(十五分鐘後........)
沒錯!實驗結果完全如此!
這個Inflater裡的函數非常有趣!
「ViewGroup root」帶Null或帶參數...對「int resource」解析的結果會完全不同!
剛剛同事花了半天才發現如果帶「ViewGroup root」,其實回傳的是這個「ViewGroup root」。
一般情況下這沒什麼,但如果「int resource」最外層的ViewGroup是個設計者自行設計的Layout類別,結果Inflater會忽略這個類別,然後只把「int resource」內的ChildView解析出來、加入「ViewGroup root」中。
會不會有點繞口?
詳細一點說明,如果設計者自行設計了一個LinearLayoutA,並且將它用在XML中,而且是包在檔案最外層。
如果帶了個「ViewGroup root」給Inflater,則Inflater會跳過這個LinearLayoutA的XML不去解析。
如果真是這樣,可以做個實驗.......
XML檔最外層是個FrameLayout,但「ViewGroup root」卻是個LinearLayout。
則用一個「FrameLayout frameLayout」參數去接收Inflater的回傳時,肯定會出錯............
等等做實驗!
(十五分鐘後........)
沒錯!實驗結果完全如此!
沒有留言:
張貼留言