1. Fragment 使用時(shí)要有一個(gè)無參構(gòu)造函數(shù)

如果沒有無參構(gòu)造函數(shù),而是像按照普通類來使用,只創(chuàng)建有參構(gòu)造函數(shù),則會出現(xiàn) android.support.v4.app.Fragment$InstantiationException 錯(cuò)誤。

原因:Fragment 和 Activity 都是生命周期的組件,不能看做一般的類。如果非要使用有參構(gòu)造函數(shù),可能在使用的時(shí)候第一次傳參沒有問題,但是大概率在后面使用的時(shí)候出現(xiàn)問題。因?yàn)镕ragment的什么周期依附在Activity中,如果Activity為null,那么Fragment肯定不能夠正常使用了,比如手機(jī)屏幕的橫豎屏切換導(dǎo)致Activity重建了。

至于為什么是這樣的呢?看下Fragment初始化的源碼,有這么一段:

復(fù)制代碼
/** * Create a new instance of a Fragment with the given class name.  This is
 * the same as calling its empty constructor.
 *
 * @param context The calling context being used to instantiate the fragment.
 * This is currently just used to get its ClassLoader.
 * @param fname The class name of the fragment to instantiate.
 * 
        		

網(wǎng)友評論