PreferenceActivity(一)

PreferenceActivity(一)br 为了引入这个概念首先从需求说起即 现有某 Activity 专门用于手机属性设置那么应该如何做呢 br 根据已学知识很快一个念头闪过即 Activity Preference 组合前者用于界面构建后者用于设置数据存放 nbsp 其实这是正确的但是这会比较繁琐因为每个设置选项都要建立与其对应的 Preference 所以 nbsp 现在有更好的选择了那就是本文的主角 PreferenceAc 从名字应该可以看出其实 Activity 与 Perference 的混合

从名字应该可以看出 其实 Activity 与 Perference 的混合物
还是从需求说起  常见属性设定  有哪几种方式:
1. CheckBox  用于 确定/取消  某项功能    如:是否静音   对应于:CheckBoxPreference   其在Preference 有一个选项与其自动绑定 下
2.  ListView 用于列出所有选择  如:铃声选择 列出所有声音供选择使用  对应于:ListPreference
3.  属性结合 用于列出一系列相关属性 如:所有与短消息有关的功能 对应于:PreferenceScreen  该项仅用于界面 故与Preference无关界面 其实 讨论这个 比较鸡肋 大家自己试着运行就一目了然了  所以 觉得还是以步骤为主,鉴于PreferenceActivity使用 网络很多 故此略过 为了给自己备份 防止以后用到 大致叙述一下
 
[代码 步骤]

1.  PreferenceActivity  界面比较特别 在 res/xml/setting.xml
Java代码
  1. “1.0” encoding=“utf-8”?>   
  2.  xmlns:android=“http://schemas.android.com/apk/res/android”>   
  3.     
  4.             android:key=“autoBack”  
  5.             android:title=“自动回复”  
  6.             android:summaryOn=“开启”  
  7.             android:summaryOff=“关闭”  
  8.             android:defaultValue=“true”  
  9.         />   
  10.            
  11.      “SMS 助手”>   
  12.         
  13.                 android:key=“smsSilence”  
  14.                 android:title=“静音”  
  15.                 android:summaryOn=“开启”  
  16.                 android:summaryOff=“关闭”  
  17.                 android:defaultValue=“false”  
  18.             />   
  19.          “更多选项”>   
  20.             
  21.                 android:key=“cb21”  
  22.                 android:title=“功能1”  
  23.                 android:summaryOn=“开启”  
  24.                 android:summaryOff=“关闭”  
  25.                 android:defaultValue=“true”  
  26.             />   
  27.             
  28.                 android:key=“cb22”  
  29.                 android:title=“功能2”  
  30.                 android:summaryOn=“使用”  
  31.                 android:summaryOff=“停用”  
  32.                 android:defaultValue=“true”  
  33.             />   
  34.         
  35.             android:key=“list1”  
  36.             android:title=“android forum”  
  37.             android:summary=“开发论坛”  
  38.             android:dialogTitle=“请选择论坛”  
  39.             android:entries=“@array/entries_list_preference”  
  40.             android:entryValues=“@array/entriesvalue_list_preference”  
  41.         />   
  42.         
  43.         android:key=“et1”  
  44.         android:title=“EditTextPreference Sample”  
  45.         android:summary=“点击输入”  
  46.         android:dialogTitle=“输入设置”  
  47.         android:defaultValue=“Hello EditTextPreference”  
  48.         />   
  49.            
  50.        
  51.        
  52.      “其他选项”>   
  53.     
  54.         android:key=“rt1”  
  55.         android:title=“RingtonePreference Sample”  
  56.         android:summary=“选择铃声”  
  57.     />   
  58.        
  59.   
 
    
    
     
     
      
      
       
       
       
       
      
     
     
      
     
   

 

 

2. 导入setting.xml

 

Java代码
  1. addPreferencesFromResource(R.xml.settings);  

4. 监听设定变化问题    普通布局里的监听  比较简单 先通过findViewById()获得目标View  再在其上注册监听器即可

 

但是 PreferenceActivity 并没有提供findViewById()  也就无法监听 那么 怎么做呢?  

 

– 得到SharedPreferences 句柄

 

Java代码

  1. sp = PreferenceManager.getDefaultSharedPreferences(this);  
sp = PreferenceManager.getDefaultSharedPreferences(this);

 

– 在 sp 之上注册改变监听器

 

Java代码

  1. sp.registerOnSharedPreferenceChangeListener(new OnSharedPreferenceChangeListener(){   
  2.   
  3.                 @Override  
  4.                 //sharedPreferences:句柄   
  5.                 //key: 改变 键值   
  6.                 public void onSharedPreferenceChanged(   
  7.                         SharedPreferences sharedPreferences, String key) {   
  8.                     // TODO Auto-generated method stub   
  9.                        
  10.                     if(key.equals(“autoBack”)){   
  11.                         Boolean autoBack = sharedPreferences.getBoolean(“autoBack”false);   
  12.                         if(autoBack){   
  13.                             Log.d(“TAG”,“autoBack: true!”);   
  14.                         }   
  15.                         else {   
  16.                             Log.d(“TAG”,“autoBack: false!”);   
  17.                         }   
  18.                     }   
  19.                 }   
  20.                    
  21.             });  
sp.registerOnSharedPreferenceChangeListener(new OnSharedPreferenceChangeListener(){ @Override //sharedPreferences:句柄 //key: 改变 键值 public void onSharedPreferenceChanged( SharedPreferences sharedPreferences, String key) { // TODO Auto-generated method stub if(key.equals("autoBack")){ Boolean autoBack = sharedPreferences.getBoolean("autoBack", false); if(autoBack){ Log.d("TAG","autoBack: true!"); } else { Log.d("TAG","autoBack: false!"); } } } });

 

 

 

5. Preference 异地使用 即:PreferenceActivity 在一个应用程序 而别处应用程序可能也想改变该数据   怎么做呢?

 

– 通过getSharedPreferences()  得到SharedPreferences实例

 

Java代码

  1. spc = this.getSharedPreferences(“com.android.PreferenceActivity.Usage_preferences.xml”, MODE_WORLD_READABLE );  
spc = this.getSharedPreferences("com.android.PreferenceActivity.Usage_preferences.xml", MODE_WORLD_READABLE );

 

– 取值

 

Java代码

  1. Boolean autoBack = spc.getBoolean(“autoBack”false);  
Boolean autoBack = spc.getBoolean("autoBack", false);

 

– 赋值

 

Java代码

  1. public void putValue(String key, Boolean value){   
  2.         spe = spc.edit();   
  3.         spe.putBoolean(key, value);   
  4.         spe.commit();   
  5.     }  
public void putValue(String key, Boolean value){ spe = spc.edit(); spe.putBoolean(key, value); spe.commit(); }

 

 

 

就这样结束 似乎感觉不爽 所以决定加点料

 

 

– ListPreference 使用

 

Java代码

  1.             android:key=“list1”  
  2.             android:title=“android forum”  
  3.             android:summary=“开发论坛”  
  4.             android:dialogTitle=“请选择论坛”  
  5.             android:entries=“@array/entries_list_preference”  
  6.             android:entryValues=“@array/entriesvalue_list_preference”  
  7.         />  

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/177604.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月26日 下午7:07
下一篇 2026年3月26日 下午7:07


相关推荐

  • Python 换行符转换

    Python 换行符转换因为工作需求 需要把目录下的所有换行符转换为 windows 换行符 r n 文件太多 只好写一个简单的 python 脚本转换 importosimpo pathrootdir r D src defreplace filename try oldfile open rootdir filename rb newfile op

    2026年3月26日
    2
  • AVAudioPlayer播放在线音频文件「建议收藏」

    AVAudioPlayer播放在线音频文件「建议收藏」AVAudioPlayer播放在线音频文件一:原里:AVAudioPlayer是不支持播放在线音频的,但是AVAudioPlayer有一个initWithData的方法;我们可以把在线音频转换为NSdata;然后播放二:如代码:NSData*soundData=[sharedAppSettingsControllergetSoundUrl:defau…

    2026年2月16日
    5
  • 差分进化算法_差分进化算法入门及实例应用

    差分进化算法_差分进化算法入门及实例应用这个就当是自己学习的整理总结吧 一 差分进化算法理论差分进化算法是基于群体智能理论的优化算法 通过群体内个体间的合作与竞争而产生的智能优化搜索算法 1 1 差分进化特点 1 结构简单 容易使用 主要通过差分变异算子来进行遗传操作 2 性能优越 具有较好的可靠性 鲁棒性 高效性 3 自适应性 差分变异算子可以是一个常数 也可以是一个具有变异步长和搜索方向的自适应能力 4 具有内在并行性

    2026年3月17日
    2
  • icp光谱分析仪_个人icp备案

    icp光谱分析仪_个人icp备案输入44 21 2 4 84 0100 99 98 972 210000 100005 30 0 0 0 1696RichmanImpossible代码#include<bits/stdc++.h>using namespace std;typedef long long ll;const int N = 1e5 + 10;int a[N];int main(){ int T; cin>>T; while(T -..

    2022年8月9日
    10
  • R语言for循环的替换方案

    R语言for循环的替换方案R 语言中 for 循环运行比较慢 for iin1 1000 print i 2

    2026年3月19日
    3
  • oracle11g 安装到连接数据库详细教程

    oracle11g 安装到连接数据库详细教程文章目录1.下载oracle11g2.安装3.连接数据库1.下载oracle11g官网需要注册账号比较麻烦百度网盘提取密码:gcig这里百度网盘下载特别方便2.安装下载解压如下运行setup.exe出现如下信息:一会这个就自动关闭了,等一会就会出现如下安装页面不用管,直接是,然后开始安装出然后出现如下我们不需要更新,直接把这个勾取消掉,然后下一…

    2022年7月25日
    25

发表回复

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

关注全栈程序员社区公众号