Setting学习(二)-静态界面的渲染
可以看到在SettingsActivity的onCreate方法中有getMetaData()方法
ai.metaData.getString(META_DATA_KEY_FRAGMENT_CLASS);这个函数的主要作用就是从Activity标签中获取meta-data标签中key为com.android.settings.FRAGMENT_CLASS的值,并将其赋值给mFragmentClass这个私有变量。对于主界面来说它没有定义"com.android.settings.FRAGMENT_CLASS"的值,那么mFragmentClass就是空的。
接着调用了getIntent方法:
构建一个intent并为其增加一个特殊的键值对
key:settings:show_fragment(EXTRA_SHOW_FRAGMENT),
value:mfragmentClass指定的类名
getIntent方法中看到通过getStartingFragmentClass(superIntent)方法创建了startingFragment
对象来给Intent赋值,进入getStartingFragmentClass方法:
这个可以看到 如果mFragmentClass的值不为空的话就会返回mFragmentClass,所以要先执行getMetaData,是因为mFragmentClass赋值是在getMeatData中进行的。
onCreate方法继续执行,之后调用到launchSettingFragment方法,将获得的Intent传入
第一次进入主界面后:
initialArguments通过赋值保存了meta-data中指定的value值。
在上面的launchSettingFragmtn方法中调用switchToFragemnt方法的时候如果是主界面传入的是DashboardSummary,如果是子界面的话传入的是initialFragmentName
通过getIntent方法获得的Intent来获值,通过这个
settings:show_fragment(EXTRA_SHOW_FRAGMENT)键值来获取value:mfragmentClass指定的类名,然后加载子界面指定的fragment
第一次进入到主界面时mIsShowingDashboard是等于true的,所以会进入else
调用switchToFragment方法:
可以看到先判断传入的fragment是否合法,然后将传入fragment进行实例化,最后通过replace方法进行渲染。
加载DashboardSummary(Fragment)显示一级菜单页面;
其他的则加载子菜单页面
参考 :https://blog.****.net/qq_34149526/article/details/83211665