MainActivity如下:

package cn.testpreferenceactivity;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.preference.CheckBoxPreference;
import android.preference.ListPreference;
import android.preference.Preference;
import android.preference.Preference.OnPreferenceChangeListener;
import android.preference.Preference.OnPreferenceClickListener;
import android.preference.PreferenceActivity;
import android.preference.PreferenceManager;
/**
* Demo描述:
* PreferenceActivity的使用示例
*
* 注意事项:
* 1 不要ListPreference的属性android:dialogMessage
* 若设置则无法弹出选择列表.
* 这和单选,多选对话框类似不能设置其Message.
* 2 不要ListPreference的属性android:positiveButtonText
* 即使设置也无效
* 3 注意ListPreference的默认值的设定
* android:defaultValue="222"
* 该值必须是 android:entryValues="@array/values_array"
* 这个数组中包含的值!!!!!!!!!!!!!
*
*
* 参考资料:
* 1 http://www.cnblogs.com/adm1989/archive/2012/08/01/2618403.html
* 2 http://www.eoeandroid.com/forum.php?mod=viewthread&tid=188859
* Thank you very much
*/
public class MainActivity extends PreferenceActivity {
private CheckBoxPreference mCheckBoxPreference;
private ListPreference mListPreference;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.preferenceactivity);
init();
}
private void init(){
mCheckBoxPreference=
(CheckBoxPreference) findPreference(getResources().getString(R.string.first_key));
mCheckBoxPreference.setOnPreferenceChangeListener(new PreferenceChangeListenerImpl());
mCheckBoxPreference.setOnPreferenceClickListener(new PreferenceClickListenerImpl()); mListPreference=
(ListPreference) findPreference(getResources().getString(R.string.listpreference_key));
mListPreference.setOnPreferenceChangeListener(new PreferenceChangeListenerImpl());
mListPreference.setOnPreferenceClickListener(new PreferenceClickListenerImpl());
} private class PreferenceClickListenerImpl implements OnPreferenceClickListener{
@Override
public boolean onPreferenceClick(Preference preference) {
String preferenceKey=preference.getKey().toString();
if (preferenceKey.equals(getResources().getString(R.string.first_key))) {
System.out.println("点击了CheckBoxPreference");
}
if (preferenceKey.equals(getResources().getString(R.string.listpreference_key))) {
System.out.println("点击了ListPreference");
}
return true;
}
} /**
* 注意事项:
* 在OnPreferenceChangeListener的onPreferenceChange()
* 可知改变后的值,但该值还未真正存入尚在内存中贮存.
* 所以此时调用getValuesFromSP得到的只是改变前的值.
*
*/
private class PreferenceChangeListenerImpl implements OnPreferenceChangeListener{
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
String preferenceKey=preference.getKey().toString();
if (preferenceKey.equals(getResources().getString(R.string.first_key))) {
System.out.println("切换后值为:"+newValue.toString());
}
if (preferenceKey.equals(getResources().getString(R.string.listpreference_key))) {
System.out.println("切换后值为:"+newValue.toString());
}
return true;
} } @Override
public void onBackPressed() {
getValuesFromSP();
super.onBackPressed();
} // 从PreferenceActivity的SharedPreferences中取数据
private void getValuesFromSP(){
SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(MainActivity.this);
Boolean first_value = sp.getBoolean(getResources().getString(R.string.first_key), false);
String listpreference_key = sp.getString(getResources().getString(R.string.listpreference_key), null);
System.out.println("从SharedPreferences中取出的是:" + first_value);
System.out.println("从SharedPreferences中取出的是:" + listpreference_key);
}
}

preferenceactivity.xml如下:

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" > <CheckBoxPreference
android:key="@string/first_key"
android:summary="@string/first_default"
android:summaryOff="@string/first_off"
android:summaryOn="@string/first_on"
android:title="@string/first_title"
/> <ListPreference
android:dialogIcon="@drawable/ic_launcher"
android:dialogTitle="@string/listpreference_title"
android:entries="@array/names_array"
android:entryValues="@array/values_array"
android:key="@string/listpreference_key"
android:negativeButtonText="@string/listpreference_no"
android:summary="@string/listpreference_summary"
android:title="@string/listpreference_title"
android:defaultValue="222"
/> </PreferenceScreen>

strings.xml如下:

<?xml version="1.0" encoding="utf-8"?>
<resources> <string name="app_name">TestPreferenceActivity</string>
<string name="action_settings">Settings</string>
<string name="hello_world">Hello world!</string> <string name="first_key">first_key</string>
<string name="first_on">first_on</string>
<string name="first_off">first_off</string>
<string name="first_title">first_title</string>
<string name="first_default">first_default</string> <string name="listpreference_key">listpreference_key</string>
<string name="listpreference_title">listpreference_title</string>
<string name="listpreference_summary">listpreference_summary</string>
<string name="listpreference_message">listpreference_message</string>
<string name="listpreference_ok">OK</string>
<string name="listpreference_no">NO</string> </resources>

PreferenceActivity使用示例的更多相关文章

  1. 【起航计划 019】2015 起航计划 Android APIDemo的魔鬼步伐 18 App->Device Admin 设备管理器 DeviceAdminReceiver DevicePolicyManager PreferenceActivity的使用

    Device Admin示例介绍了类DeviceAdminReceiver,DevicePolicyManager和ActivityManager. 使用DevicePolicyManager这个类, ...

  2. Swift3.0服务端开发(一) 完整示例概述及Perfect环境搭建与配置(服务端+iOS端)

    本篇博客算是一个开头,接下来会持续更新使用Swift3.0开发服务端相关的博客.当然,我们使用目前使用Swift开发服务端较为成熟的框架Perfect来实现.Perfect框架是加拿大一个创业团队开发 ...

  3. .NET跨平台之旅:将示例站点升级至 ASP.NET Core 1.1

    微软今天在 Connect(); // 2016 上发布了 .NET Core 1.1 ,ASP.NET Core 1.1 以及 Entity Framework Core 1.1.紧跟这次发布,我们 ...

  4. 通过Jexus 部署 dotnetcore版本MusicStore 示例程序

    ASPNET Music Store application 是一个展示最新的.NET 平台(包括.NET Core/Mono等)上使用MVC 和Entity Framework的示例程序,本文将展示 ...

  5. WCF学习之旅—第三个示例之四(三十)

           上接WCF学习之旅—第三个示例之一(二十七)               WCF学习之旅—第三个示例之二(二十八)              WCF学习之旅—第三个示例之三(二十九)   ...

  6. JavaScript学习笔记(一)——延迟对象、跨域、模板引擎、弹出层、AJAX示例

    一.AJAX示例 AJAX全称为“Asynchronous JavaScript And XML”(异步JavaScript和XML) 是指一种创建交互式网页应用的开发技术.改善用户体验,实现无刷新效 ...

  7. XAMARIN ANDROID 二维码扫描示例

    现在二维码的应用越来越普及,二维码扫描也成为手机应用程序的必备功能了.本文将基于 Xamarin.Android 平台使用 ZXing.Net.Mobile  做一个简单的 Android 条码扫描示 ...

  8. iOS之ProtocolBuffer搭建和示例demo

    这次搭建iOS的ProtocolBuffer编译器和把*.proto源文件编译成*.pbobjc.h 和 *.pbobjc.m文件时,碰到不少问题! 搭建pb编译器到时没有什么问题,只是在把*.pro ...

  9. Android种使用Notification实现通知管理以及自定义通知栏(Notification示例四)

    示例一:实现通知栏管理 当针对相同类型的事件多次发出通知,作为开发者,应该避免使用全新的通知,这时就应该考虑更新之前通知栏的一些值来达到提醒用户的目的.例如我们手机的短信系统,当不断有新消息传来时,我 ...

随机推荐

  1. 转:CSS圆角详解

    CSS3是样式表(style sheet)语言的最新版本,它的一大优点就是支持圆角. 网页设计大师Nicholas Zakas的最新文章,清晰易懂地解释了CSS3圆角的各个方面,非常值得学习.以下就是 ...

  2. 比较优势 - MBA智库百科

    比较优势 - MBA智库百科 比较优势 出自 MBA智库百科(http://wiki.mbalib.com/)   这是一个消除歧义页--使用相同或相近标题,而主题不同的条目列表.如果您是通过某个内部 ...

  3. leetcode第一刷_Maximal Rectangle

    这个题比刚才那个更难. 假设没做过上一个,这个简直是无情. 先想一个笨笨的解法,如何确定一个矩形呢?找一个左上角,然后每行的看能延伸到什么位置.注意随着行数的添加,列数是仅仅能变短,不能变长. 想一下 ...

  4. 具体解释EBS接口开发之WIP模块接口

    整体说明 文档目的 本文档针对WIP模块业务功能和接口进行分析和研究,对採用并发请求方式和调用API方式分别进行介绍 内容 WIP模块经常使用标准表简单介绍 WIP事物处理组成 WIP相关业务流程 W ...

  5. ExecuteReader: CommandText 属性尚未初始化

    没有对sqlcommand对象的commandtext属性赋值说白了就是没写SQL语句 -.- 无语死了.

  6. typedef和define

    typedef int INT; #define INTPTR1 (int*) typedef是用来声明类型别名的,在实际编写代码过程使用typedef往往是为了增加代码的可读性. #define是一 ...

  7. Socket编程模式理解与对比

    本文主要分析了几种Socket编程的模式.主要包括基本的阻塞Socket.非阻塞Socket.I/O多路复用.其中,阻塞和非阻塞是相对于套接字来说的,而其他的模式本质上来说是基于Socket的并发模式 ...

  8. Qt学习之路:自定义Model三篇,自定义委托等等

    http://devbean.blog.51cto.com/448512/d-8/p-2

  9. Oracle多实例的配置方法

    SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (SID_NAME = PLSExtProc) (ORACLE_HOME /dbhome_2) (PROGRAM ...

  10. 数据交换工具Kettle

    网上搜集了一些关于开源数据交换工具Kattle的文章,特收藏例如以下: 文章一:ETL和Kettle简单介绍 ETL即数据抽取(Extract).转换(Transform).装载(Load)的过程.它 ...