Error:(26, 117) 錯誤: 不相容的型別: Fragment無法轉換為NewsContentFragment 解決方法
圖3
剛開始以為程式碼哪裡寫錯了,對著書本仔細檢查了好多遍,還是沒找出哪裡出錯了。回過頭來再看錯誤提示資訊,說是型別轉換錯誤,更是摸不到頭腦,自己明明是繼承了Fragment類,怎麼會出錯。突然想起來書中好像有說繼承Fragment類有兩種方式,會不會在這出了問題。果然是這樣。當繼承Fragment時,會有兩個不同包下的Fragment供我們選擇, 一個是系統內建的android.app.Fragment,一個是support-v4庫中的android.support.v4.app.Fragment,但是建議使用後者,因為它可以讓碎片在所有Android系統版本中保持功能一致性。我們並不需要在build.gradle檔案中新增support-v4庫依賴,因為build.gradle檔案中已經新增appcompat-v7庫的依賴,而這個庫會將support-v4庫也一起引入進來。
我程式中Fragment是繼承自android.app.Fragment的,在下面的語句中我使用了getSupportFragmentManager()這個方法,
NewsContentFragment newsContentFragment = (NewsContentFragment) getSupportFragmentManager().findFragmentById(R.id.news_content_fragment);
顯然這個方法是對應android.support.v4.app.Fragment包的,不出錯才怪。
終上所述,有兩個方法可以解決這個問題:
1、將圖3程式碼中getSupportFragmentManager()方法改為android.app.Fragment對應的getFragmentManager()
2、將圖2程式碼頂部的import android.app.Fragment改為import android.support.v4.app.Fragment
強烈建議採用第二種方法來保證程式的相容性。