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.csdn.net/qq_34149526/article/details/83211665

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值