您的位置:首页 > 移动开发 > Android开发

android技巧01:Preferencescreen中利用intent跳转activity

2013-05-27 16:55 573 查看
设置中的Preferencescreen不仅可以作为设置界面显示,而且还能够启动activity,下面主要是对启动activity的介绍

1. Preferencescreen中启动activity

例如wireless_setting.xml中有如下片段

[html] view
plaincopy

<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有关,有时候我们会重写这个方法如:

[java] view
plaincopy

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函数中如下:

[java] view
plaincopy

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);

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: