1.纯代码实现:
在Settings.java 的下面方法中,
private void getMetaData(Intent intent) {}
添加以下代码
if (action != null) {
if (action.equals(individuationAction)) {//Action 是指定的Action
mIndividuationHeader = new Header();//创建header对象
mIndividuationHeader.fragment = "com.android.settings.individuation.SecuritySettings";//指定他的视图Fragment对象
mIndividuationHeader.title = getResources().getString(
R.string.running_settings);//设置header 的标题
switchToHeaderLocal(mIndividuationHeader);
} else {
getMetaData();//处理已在manifest中注册的跳转项
}
} else {
getMetaData();
}
还要在Manifest中,Settings Activity的 intent-filter中,添加要拦截的Action 字段
2:在Manifest中配置,以wifi设置为例:1、在Settings.java 中添加 入口Activity ,因为Manifest中只能配置4大组件及相关权限声明,Fragment无法在其中显式配置,并声明Action拦截。
public static class WifiSettingsActivity extends Settings { /* empty */
}
2、在Manifest中添加,拦截的Action,并配置相关的Fragment和title。
3、当其他应该请求跳转到wifi设置的时候,在oncreate()中,会先调用getMetaData(Intent intent) 去加载指定的Fragment,并显示。<activity android:name="Settings$WifiSettingsActivity" android:clearTaskOnLaunch="true" android:configChanges="orientation|keyboardHidden|screenSize" android:label="@string/wifi_settings" android:parentActivityName="Settings" > <intent-filter> <action android:name="android.intent.action.MAIN" />
<action android:name="android.settings.WIFI_SETTINGS" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.VOICE_LAUNCH" /> <category android:name="com.android.settings.SHORTCUT" /> </intent-filter> <!-- 设置Fragment 视图加载类 --> <meta-data android:name="com.android.settings.FRAGMENT_CLASS" android:value="com.android.settings.wifi.WifiSettings" /><!-- 拦截Action -->
<meta-data android:name="com.android.settings.TOP_LEVEL_HEADER_ID" android:resource="@id/wifi_settings" /><!-- 设置title -->
</activity>
第2中未验证,有什么问题意见,可以相互交流