1.本文是接接上一篇Setting启动分析
2.本文主要是对DisplaySettings进行分析
1.总概况
本章主要分析点击左图显示,显示中图,点击互动屏保后跳转到右图的过程。
2.加载SettingsActivity
在setting中的选项为都在R.xml.dashboard_categories中,点击后会加载fragment,本次研究的DisplaySettings如下:
<dashboard-tile
android:id="@+id/display_settings"
android:title="@string/display_settings"
android:fragment="com.android.settings.DisplaySettings"
android:icon="@drawable/ic_settings_display"
/>
可知点击后会调用com.android.settings.DisplaySettings这个fragment。但是点击处理的代码在哪里呢,一般情况下可以从SettingsActivity、DashboardSummary等代码中找,但是本次点击事件的响应是在DashboardTileView类的onclick函数中。
@Override
public void onClick(View v) {
if (mTile.fragment != null) {
Utils.startWithFragment(getContext(), mTile.fragment, mTile.fragmentArguments, null, 0,
mTile.titleRes, mTile.getTitle(getResources()));
} else if (mTile.intent != null) {
getContext().startActivity(mTile.intent);
}
}
很明显,mTile.fragment是"com.android.settings.DisplaySettings",不是null。进入Utils.startWithFragment()函数。
public static void startWithFragment(Context context, String fragmentName, Bundle args,
Fragment resultTo, int resultRequestCode, int titleResId,
CharSequence title) {
startWithFragment(context, fragmentName, args, resultTo, resultRequestCode,
null /* titleResPackageName */, titleResId, title, false /* not a shortcut */);
}
跳转一下
public static void startWithFragment(Context context, String fragmentName, Bundle args,
Fragment resultTo, int resultRequestCode, String titleResPackageName, int titleResId,
CharSequence title, boolean isShortcut) {
Intent intent = onBuildStartFragmentIntent(context, fragmentName, args, titleResPackageName,
titleResId, title, isShortcut);
if (resultTo == null) {
context.startActivity(intent);
} else {
resultTo.startActivityForResult(intent, resultRequestCode);
}
}
先看onBuildStartFragmentIntent函数
public static Intent onBuildStartFragmentIntent(Context context, String