用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


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C知道: 要启动一个 PreferenceScreen,您可以按照以下步骤进行操作: 1. 首先,在您的 Android 项目的 XML 布局文件创建一个 PreferenceScreen 元素。例如,您可以在 res/xml 目录下创建一个的 XML 文件,命名为 preferences.xml。 2. 在 preferences.xml 文件,您可以添加各种偏好设置项,例如 CheckBoxPreference、ListPreference 等。您可以根据您的需要自定义这些偏好设置项的属性。 3. 在您的 Activity ,使用以下代码加载 PreferenceScreen: ```java @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 加载 PreferenceScreen getFragmentManager().beginTransaction() .replace(android.R.id.content, new MyPreferenceFragment()) .commit(); } ``` 其,MyPreferenceFragment 是一个继承自 PreferenceFragment 的自定义 Fragment 类。您需要在该类重写 onCreatePreferences 方法,并在其添加 preferences.xml 文件的资源 ID: ```java public class MyPreferenceFragment extends PreferenceFragment { @Override public void onCreatePreferences(Bundle savedInstanceState, String rootKey) { addPreferencesFromResource(R.xml.preferences); } } ``` 4. 运行您的应用程序,您将看到加载了您在 preferences.xml 定义的偏好设置项的 PreferenceScreen。 这样,您就成功启动一个 PreferenceScreen,并可以在其添加和管理偏好设置项。希望对您有所帮助!如有任何进一步问题,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值