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);
}
}
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);
}
}
相关文章推荐
- 用intent实现Android中Activity之间的跳转
- Android Intent实现Activity之间跳转并传值
- Creat & Use Android Button -利用BUTTON 跳转ACTIVITY
- Android实现intent跳转界面传递数据(2)——onActivityResult方法接收返回值
- 安卓开发之如何利用Intent对象,实现Activity和另一个Activity之间的跳转
- Android 使用多个Intent 进行activity跳转 而没有finish的情况,如何直接退出系统
- Android使用多个Intent进行Activity跳转,如何直接退出系统
- 【Android】12.2 利用Intent启动和关闭Activity
- Android知识点2-Adapter中使用Intent跳转到另一个activity
- 移动开发 - Android - 实现两个页面(Activity)的简单跳转(Intent)
- Android学习 (二十) 在fragment里用Intent跳转到其他Activity
- Android使用intent跳转到其它应用activity界面
- android Intent实现Activity之间跳转并传值
- Android Activity – From One Screen To Another Screen从一个屏幕切换到另一屏幕,Intent
- 退出整个应用程序 以及 利用intent标志跳转到某个Activity
- 从一个activity跳转到另一个activity,利用intent传递数据
- Activity 跳转全解 android-Intent (带参数&不带参数的跳转)
- Android Activity中使用Intent实现页面跳转与参数传递的方法
- Android使用Intent实现Activity之间的跳转
- Android开发 两个Activity之间通过Intent跳转传值