Android Preferencescreen用法

Android Preferencescreen用法设置中的Preferencescreen不仅可以作为设置界面显示,而且还能够启动activity,下面主要是对启动activity的介绍1.Preferencescreen中启动activity例如wireless_setting.xml中有如下片段http://schemas.android.com/apk/res/android”xmlns:settings=”http://

 

设置中的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是要启动的类。
一般情况下,这样就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。

今天的文章Android Preferencescreen用法分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/25994.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注