android设置中的Preferencescreen使用方法介绍与分析

it2025-09-15  34

今天主要研究了一下设置中的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。

转载于:https://www.cnblogs.com/bhlsheji/p/4297554.html

相关资源:数据结构—成绩单生成器
最新回复(0)