Fragment與Activity之間的資料互動
阿新 • • 發佈:2018-12-11
一、Activity把值傳遞給Fragment
- 建議的傳值方式是通過Bundle來傳遞,而不是直接作為fragment的構造引數傳遞。在activity中建立bundle資料包,並呼叫fragment的setArguments(Bundle bundle)方法,即可將Bundle資料包傳給fragment。在Fragment中用getArguments方法得到傳遞過來的值。
- 在宿主Activity中定義方法,將要傳遞的值傳遞到Fragment中,在Fragment中的onAttach方法中,獲取到這個值。
- 擴充套件一下建立Fragment和傳遞數值
二、Fragment把值傳遞給Activity
在fragment中定義一個內部回撥介面,再讓包含該fragment的activity實現該回調介面,這樣fragment即可呼叫該回調方法將資料傳給activity。介面回撥是java不同物件之間資料互動的通用方法。
activity實現完了介面怎麼傳給剛才的fragment呢?當fragment新增到activity中時,會呼叫fragment的方法onAttach(),這個方法中適合檢查activity是否實現了OnArticleSelectedListener介面,檢查方法就是對傳入的activity的例項進行型別轉換,然後賦值給我們在fragment中定義的介面。
在一個fragment從activity中剝離的時候,就會呼叫onDetach方法,這個時候要把傳遞進來的activity物件釋放掉,不然會影響activity的銷燬,產生不必要的錯誤。注意看onAttach方法中的程式碼,在賦值之前要做一個判斷,看看Activity中有沒有實現了這個介面,用到了instanceof。如果沒有實現介面,我們就丟擲異常。