(转)android技巧01:Preferencescreen中利用intent跳转activity
原文连接:http://blog.csdn.net/xianming01/article/details/7543464
设置中的Preferencescreen不仅可以作为设置界面显示,而且还能够启动activity,下面主要是对启动activity的介绍
1. Preferencescreen中启动activity
例如wireless_setting.xml中有如下片段
- <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:settings="http://schemas.android.com/apk/res/com.seedshope.android">
- <PreferenceScreen
- android:key="wifi_settings"
- android:title="@string/wifi_settings"
- android:summary="@string/wifi_settings_summary" >
- <intent
- android:action="android.intent.action.MAIN"
- android:targetPackage="com.android.settings"
- android:targetClass="com.android.settings.wifi.WifiSettings" />
- </PreferenceScreen>
- </PreferenceScreen>
其中com.android.settings是工程的包名,com.android.settings.wifi.WifiSettings是要启动的类。另外,xmlns:settings这一项没有也是可以的(那它的作用是什么?)。
一般情况下,这样就ok了,点击对应的Preference就能够启动对应的activity,然而仅仅这样有时这样,并不一定能够启动对应的activity,因为它与回调函数onPreferenceTreeClick有关,有时候我们会重写这个方法如:
- public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) {
- if ( (preference == mAirplaneModePreference) &&
- (Boolean.parseBoolean(
- SystemProperties.get(TelephonyProperties.PROPERTY_INECM_MODE))) ) {
- // In ECM mode launch ECM app dialog
- startActivityForResult(
- new Intent(TelephonyIntents.ACTION_SHOW_NOTICE_ECM_BLOCK_OTHERS, null),
- REQUEST_CODE_EXIT_ECM);
- return true;
- }
- else {
- // Let the intents be launched by the Preference manager
- return false;
- }
- }
其中WirelessSetting.java中有如上函数,当返回值为true时,你怎么点击Preference都不会跳转到activity的,只有等到它的返回值为false的时候,才可以正常跳转,因为点击某一个Preference的真正实现在Preference.java的performClick函数中如下:
- void performClick(PreferenceScreen preferenceScreen) {
- if (!isEnabled()) {
- return;
- }
- onClick();
- if (mOnClickListener != null && mOnClickListener.onPreferenceClick(this)) {
- return;
- }
- PreferenceManager preferenceManager = getPreferenceManager();
- if (preferenceManager != null) {
- PreferenceManager.OnPreferenceTreeClickListener listener = preferenceManager
- .getOnPreferenceTreeClickListener();
- if (preferenceScreen != null && listener != null
- && listener.onPreferenceTreeClick(preferenceScreen, this)) {
- return;
- }
- }
- if (mIntent != null) {
- Context context = getContext();
- context.startActivity(mIntent);
- }
- }
作者:loverszhaokai
出处:http://www.cnblogs.com/lovers
本文采用知识共享署名-非商业性使用-相同方式共享 2.5 中国大陆许可协议进行许可,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。