[-]

  1. 代码实现preference
  2. 利用preference保存状态
  3. DialogPreference

代码实现preference

View可以不通过xml进行设置,有代码直接进行设置,首选项preference也一样。下面是代码设置list preference的例子,是在通过header来指向PreferenceFragment的类,在PreferenceActivity中的实现也是类似的。

public class ListPreferenceFragment extends PreferenceFragment {  
    @Override 
    public void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState); 
        addPreferencesFromResource(R.xml.fightoptions);  
        // 通过key来获得prefrenence 
        ListPreference listpref = (ListPreference) findPreference("selected_flight_sort_option");
        listpref.setEntries(new String[]{"Entry 1","Entry 2","Entry 3"});
        listpref.setEntryValues(new String[]{"0","1","2"}); 
    } 
}

如果需要从创建PreferenceScreen开始,下面是例子:

public class ListPreferenceFragment extends PreferenceFragment {
   @Override 
    public void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState); 
        //创建PreferenceScreen 
        PreferenceScreen screen = getPreferenceManager().createPreferenceScreen( getActivity() );
        //创建PreferenceCategory,并加入preference screen 
        PreferenceCategory inlinePrefCat = new PreferenceCategory(getActivity());

        inlinePrefCat.setTitle("Hello"); 
        screen.addPreference(inlinePrefCat); 
        //创建List preference,并加入preference category
        ListPreference listpref = new ListPreference(getActivity());
 
        listpref.setKey("my_list_pref"); 
        listpref.setTitle("Code For list preference"); 
        listpref.setSummary("完全用代码编写的首选项测试"); 
        listpref.setEntries(new String[]{"Entry 1","Entry 2","Entry 3"}); 
        listpref.setEntryValues(new String[]{"0","1","2"});  
        screen.addPreference(listpref); 
        // 将preference screen加入 preference fragment中
        setPreferenceScreen(screen);
 
    }  
}

利用preference保存状态

Preference的信息在设备中通过文件保存,我们可以利用这个特点来进行数据和状态的存贮,例如游戏的最高得分。下面的例子,利用preference存贮文件保存两个参数,“initialized”是boolean,表示应用是否第一次运行。“call_number”是个计数器,每次调用dataStore()方法就加一。

private final String INITIALIZER = "initialized"; 
private final String CALLNUM = "call_number";

private void dataStore(){  
   //等同于PreferenceManager.getDefaultSharedPreferences(this);或者通过getShearedPreferences(name,mode)来指定文件名,可以通过editor来写。除了MODE_PRIVATE外,还有MODE_WORLD_READABLE和MODE_WORLD_WRITEABLE,这是用来创建preference是设置的权限。如果我们只限于本应用使用,可设置MODE_PRIVATE。
    SharedPreferences prefs = getPreferences(MODE_PRIVATE);  
    boolean hasPreferences = prefs.getBoolean(INITIALIZER, false); 
    int num = prefs.getInt(CALLNUM, 0); 
    if(hasPreferences){  
        Log.d("PRO","We've been called " + num + " times before. "); 
    }else{  
        Log.d("PRO","First time ever being called."); 
    } 
    //写入preference 
   Editor editor = prefs.edit();  
   editor.putBoolean(INITIALIZER, true);  
   num ++;  
   editor.putInt(CALLNUM, num); 
   editor.commit();  
//或者editor.apply(); 
}

DialogPreference

DialogPreference是EditTextPreference和ListPreference的基类,如果我们需要有自己的弹框效果,可以继承DialogPreference来自定制layout,点击触发处理,并在onDialogClose()中处理写preference文件。

本博文涉及的例子代码,可以在Pro Android学习:Preference(首选项)小例子中下载。

相关链接: 我的Android开发相关文章

【转】 Pro Android学习笔记(六三):Preferences(7):代码控制首选项的更多相关文章

  1. 【转】Pro Android学习笔记(三十):Menu(1):了解Menu

    目录(?)[-] 创建Menu MenuItem的属性itemId MenuItem的属性groupId MenuItem的属性orderId MenuItem的属性可选属性 Menu触发 onOpt ...

  2. 【转】Pro Android学习笔记(三):了解Android资源(上)

    在Android开发中,资源包括文件或者值,它们和执行应用捆绑,无需在源代码中写死,因此我们可以改变或替换他们,而无需对应用重新编译. 了解资源构成 参考阅读Android学习笔记(三八):资源res ...

  3. 【转】 Pro Android学习笔记(三二):Menu(3):Context菜单

    目录(?)[-] 什么是Context menu 注册View带有Context menu 填Context菜单内容 Context菜单点击触发 什么是Context menu 在桌面电脑,我们都很熟 ...

  4. 【转】 Pro Android学习笔记(三三):Menu(4):Alternative菜单

    目录(?)[-] 什么是Alternative menu替代菜单 小例子说明 Alternative menu代码 关于Category和规范代码写法 关于flags 多个匹配的itemId等参数 什 ...

  5. 【转】 Pro Android学习笔记(五六):配置变化

    目录(?)[-] Activity的destorycreate过程 Fragment的destorycreate过程 onSaveInstanceState saveFragmentInstanceS ...

  6. 【转】 Pro Android学习笔记(六七):HTTP服务(1):HTTP GET

    目录(?)[-] HTTP GET小例子 简单小例子 出现异常NetworkOnMainThreadException 通过StrictMode进行处理 URL带键值对 Andriod应用可利用ser ...

  7. Pro Android学习笔记(一三七):Home Screen Widgets(3):配置Activity

    文章转载仅仅能用于非商业性质,且不能带有虚拟货币.积分.注冊等附加条件.转载须注明出处http://blog.csdn.net/flowingflying/以及作者@恺风Wei. 通过widget定义 ...

  8. 【转】 Pro Android学习笔记(八二):了解Package(1):包和进程

    文章转载只能用于非商业性质,且不能带有虚拟货币.积分.注册等附加条件.转载须注明出处:http://blog.csdn.net/flowingflying/ 在之前,我们已经学习了如何签发apk,见P ...

  9. 【转】 Pro Android学习笔记(七四):HTTP服务(8):使用后台线程AsyncTask

    目录(?)[-] 5秒超时异常 AsyncTask 实现AsyncTask抽象类 对AsyncTask的调用 在哪里运行 其他重要method 文章转载只能用于非商业性质,且不能带有虚拟货币.积分.注 ...

  10. Pro Android学习笔记 ActionBar(1):Home图标区

     Pro Android学习笔记(四八):ActionBar(1):Home图标区 2013年03月10日 ⁄ 综合 ⁄ 共 3256字 ⁄ 字号 小 中 大 ⁄ 评论关闭 ActionBar在A ...

随机推荐

  1. js网页视频播放: vcastr22 、 flowplayer 、 jwplayer

    实例结构: 实例1: demo.html <embed src="vcastr22.swf?vcastr_file=../wujiandao.flv" allowFullSc ...

  2. Java编程中的一些常见问题汇总

    转载自  http://macrochen.iteye.com/blog/1393502 每天在写Java程序,其实里面有一些细节大家可能没怎么注意,这不,有人总结了一个我们编程中常见的问题.虽然一般 ...

  3. 【学员管理系统】0x03 老师信息管理功能

    [学员管理系统]0x03 老师信息管理功能 老师信息管理相比于学生信息管理又多了一点,因为我们的数据结构中老师表和班级表是通过teacher2class表进行多对多关联的. 写在前面 项目详细需求参见 ...

  4. 关于python2中的unicode和str以及python3中的str和bytes

    python3有两种表示字符序列的类型:bytes和str.前者的实例包含原始的8位值:后者的实例包含Unicode字符. python2中也有两种表示字符序列的类型,分别叫做str和unicode. ...

  5. float元素的父元素自适应高度

    当在对象内的盒子使用了float后,导致对象本身不能被撑开自适应高度,这个是由于浮动产生原因. 如何解决父div对象自适应高度,方法有三种. 1.对父元素设置固定高度 2.使用clear清除浮动 3. ...

  6. Nginx Rewrite语法详解

    重写中用到的指令 if  (条件) {}  设定条件,再进行重写 set #设置变量 return #返回状态码  return 403; break #跳出rewrite rewrite #重写 I ...

  7. web应用组成结构,web.xml的作用

  8. matlab画圆

    MATLAB rectangle函数1 语法说明rectangle('Position', pos)rectangle('Position', pos, 'Curvature', cur)rectan ...

  9. iOS App被拒原因以及解决方案总结。

    Guideline 1.2 - Safety - User Generated Content Your app enables the display of user-generated conte ...

  10. python3字符串属性(二)

    1.S.isdecimal() -> bool    Return True if there are only decimal characters in S, False otherwise ...