zoukankan      html  css  js  c++  java
  • 用android中的Preferencescreen 启动一个新的 activity

    android的 setting里的Preferencescreen,它不仅可以作为设置界面显示,而且还能够启动activity,下面主要是对启动activity的介绍
    一、 Preferencescreen中启动activity
    例如wireless_settings.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>

    关于intent标签,其中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。


    二、 Preference 启动 View,例如 网页

              <Preference
                  android:title="zghwhttt" >      
                  <intent
                      android:action="android.intent.action.VIEW"              
                      android:data="http://www.baidu.com" />  
              </Preference>

    它会新增一项,标题为android:title中设置的值,当你点击这项时,它会跳到 a web browser。

    注意:在所有的 Preference里 都可以添加 intent ,例如下边的 ListPreference:

            <ListPreference
                android:key="thirdL"
                android:title="test Listpreference"
                android:summary="first List"
                android:entries="@array/cities"
                android:entryValues="@array/airport_codes" >
                
                <intent
                    android:action="android.intent.action.VIEW"
                    android:data="http://www.baidu.com" />

                
            </ListPreference>

    //结果是,先打开 intent,后显示ListPreference


  • 相关阅读:
    C语言学习_C如何在一个文件里调用另一个源文件中的函数
    C语言学习_include<>与include""的区别
    C语言学习_一个简单程序的解释与C学习方法概括
    python_list和tuple互转
    C语言学习_恶搞小程序
    Linux命令(基础1)
    Linux基础配置
    面向对象知识补充1
    linux系统centOS在虚拟机下的自定义安装
    sql注入
  • 原文地址:https://www.cnblogs.com/liulaolaiu/p/11744878.html
Copyright © 2011-2022 走看看