今天主要研究了一下设置中的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是project的包名,com.android.settings.wifi.WifiSettings是要启动的类。
普通情况下,这样就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);
}
}
当点击某个Preference时的调用流程是AdapterView.performItemClick--》PreferenceScreen.onItemClick--》Preference.performClick--》PreferenceActivity.onPreferenceTreeClick,当onPreferenceTreeClick返回true的时候就直接return了,没有走以下启动activity的地方了,因此要使一个Preference可以正常跳转到另外一个activity有两个条件,一是xml里面是否设置正确,第二是调用该xml的java类是否在onPreferenceTreeClick这个函数须要返回false。

更多相关文章

  1. Android之碎片Fragment的生命周期
  2. android 任务和返回堆栈(Tasks and Back Stack)
  3. Android(安卓)中文API (69) ―― BluetoothAdapter[蓝牙]
  4. AndroidStudio练习用--登录Demo
  5. 得到开机启动时间
  6. 在webView 中使用JS 调用 Android(安卓)/ IOS的函数 Function
  7. Android——拍照、剪切、得到图片/从相册中选择照片(api19以上和
  8. android电话系统和ril分析(2)————rild详细分析
  9. Android(安卓)Native层Binder.transact()函数调用 Binder.onTran

随机推荐

  1. Fastboot使用详解
  2. Android - Intent基础
  3. 关于Android中的数据存储
  4. Activity横竖屏切换时的UI处理
  5. Android JNI和NDK学习(09)--JNI实例二 传
  6. 文字位于RadioButton后,如何调整间距?
  7. Android 开发者网站
  8. Android 程序获取、设置铃声和音量
  9. android H264(1): openCore简介
  10. android 文件系统结构及其引导