Android设置Settings:ListPreference【3】

Android的Settings实现中,ListPreference使用稍微复杂些,ListPreference使用两个数据源:entries和entryValues,entries和entryValues存在对应关系,可以这么简单理解,entries是人类可读的有意义的内容,而entryValues则是用来为机器或代码使用的具体的值,在前面文章【1】和【2】的基础写一个ListPreference的使用加以说明。
res/xml目录下的preferences.xml(有变化):

<?xml version="1.0" encoding="utf-8"?><PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" >    <PreferenceCategory android:title="【第1组】" >        <ListPreference            android:dialogTitle="list dialog title"            android:entries="@array/citys"            android:entryValues="@array/citys_code"            android:key="list_key"            android:summary="list summary"            android:title="list title" />    </PreferenceCategory>    <PreferenceCategory android:title="【第2组】" >        <EditTextPreference            android:defaultValue="缺省值1"            android:key="edit_text_key_1"            android:summary="edit summary"            android:title="edit text 1" />        <CheckBoxPreference            android:defaultValue="true"            android:key="checkbox_key"            android:summary="checkbox summary"            android:title="checkbox title" />    </PreferenceCategory>    <!-- 点击将浏览和打开网页 -->    <Preference        android:summary="http://blog.csdn.net/zhangphil"        android:title="浏览网页" >        <intent            android:action="android.intent.action.VIEW"            android:data="http://blog.csdn.net/zhangphil" />    </Preference>    <!-- 此处将跳转到下一屏设置 -->    <PreferenceScreen        android:key="preference_screen_2_key"        android:persistent="false"        android:title="PreferenceScreen 2" >        <EditTextPreference            android:defaultValue="缺省值2"            android:key="edit_text_key_2"            android:summary="edit summary"            android:title="edit text 2" />    </PreferenceScreen></PreferenceScreen>


需要的res/values/arrays.xml(注意变化):

<?xml version="1.0" encoding="utf-8"?><resources>    <string-array name="citys">        <item>成都</item>        <item>北京</item>        <item>上海</item>    </string-array>         <string-array name="citys_code">        <item>028</item>        <item>010</item>        <item>021</item>    </string-array>    </resources>


上层Java代码:

package zhangphil.settings;import android.content.SharedPreferences;import android.content.SharedPreferences.OnSharedPreferenceChangeListener;import android.os.Bundle;import android.preference.EditTextPreference;import android.preference.ListPreference;import android.preference.Preference;import android.preference.PreferenceActivity;import android.preference.PreferenceManager;import android.preference.PreferenceScreen;public class MainActivity extends PreferenceActivity {private MyOnSharedPreferenceChangeListener mOnSharedPreferenceChangeListener = new MyOnSharedPreferenceChangeListener();private EditTextPreference mEditTextPreference;private final String A_KEY = "edit_text_key_1";private ListPreference mListPreference;private final String LIST_KEY = "list_key";@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);// 通用的读取设置的某个值的方法SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);String s = sharedPreferences.getString(A_KEY, "暂时为空");// 添加设置的选项addPreferencesFromResource(R.xml.preferences);// 预读取。为PreferenceActivity中的某个设置选项初始化值mEditTextPreference = (EditTextPreference) findPreference(A_KEY);mEditTextPreference.setSummary(s);// 注册添加设置的项数据发生变化时候的监听sharedPreferences.registerOnSharedPreferenceChangeListener(mOnSharedPreferenceChangeListener);mListPreference = (ListPreference) findPreference(LIST_KEY);}@Overrideprotected void onResume() {super.onResume();getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(mOnSharedPreferenceChangeListener);}@Overrideprotected void onPause() {super.onPause();getPreferenceScreen().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(mOnSharedPreferenceChangeListener);}// 那一个设置选项栏被触发@Overridepublic boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) {return false;}private class MyOnSharedPreferenceChangeListener implements OnSharedPreferenceChangeListener {@Overridepublic void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {if (key.equals(A_KEY)) {// 更新String s = sharedPreferences.getString(A_KEY, "NULL");mEditTextPreference.setSummary(s);}if (key.equals(LIST_KEY)) {String e = mListPreference.getEntry() + "";String v = mListPreference.getValue();mListPreference.setSummary(e + " : " + v);}}}}


运行结果:

Android设置Settings:ListPreference【3】_第1张图片



相关文章和文档:
【1】《Android设置Settings实现:PreferenceActivity【1】》链接地址:http://blog.csdn.net/zhangphil/article/details/50154513
【2】《Android设置Settings:预读取设置的选项和更新设置结果【2】》链接地址:http://blog.csdn.net/zhangphil/article/details/50154707
【3】Android谷歌官方Settings开发文档:http://developer.android.com/guide/topics/ui/settings.html

更多相关文章

  1. Android Fresco图片处理库用法API英文原文文档2-2(Facebook开源An
  2. Android Studio中同步代码时报:Received status code 400 from se
  3. Android横向的选项卡
  4. ViewPager fragment android tab选项卡的使用
  5. Android官方文档翻译 三 1.1Creating an Android Project
  6. android java代码覆盖率
  7. Android对话框风格的Activity代码
  8. Android 删除指定文件代码

随机推荐

  1. Android(安卓)打开手电筒
  2. Android(安卓)快捷方式
  3. android .9 图片的全能适配方法
  4. android仿苹果SwitchButton效果的实现
  5. Android(安卓)短信 彩信 wap push的接收
  6. Android(安卓)计算控件尺寸
  7. Android: 可以横向拖动的TabHost
  8. 简单播放系统提示音 android
  9. Android获取UTC时间的方式
  10. android 自定义 画板