【转】 Pro Android学习笔记(六三):Preferences(7):代码控制首选项
代码实现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):代码控制首选项的更多相关文章
- 【转】Pro Android学习笔记(三十):Menu(1):了解Menu
目录(?)[-] 创建Menu MenuItem的属性itemId MenuItem的属性groupId MenuItem的属性orderId MenuItem的属性可选属性 Menu触发 onOpt ...
- 【转】Pro Android学习笔记(三):了解Android资源(上)
在Android开发中,资源包括文件或者值,它们和执行应用捆绑,无需在源代码中写死,因此我们可以改变或替换他们,而无需对应用重新编译. 了解资源构成 参考阅读Android学习笔记(三八):资源res ...
- 【转】 Pro Android学习笔记(三二):Menu(3):Context菜单
目录(?)[-] 什么是Context menu 注册View带有Context menu 填Context菜单内容 Context菜单点击触发 什么是Context menu 在桌面电脑,我们都很熟 ...
- 【转】 Pro Android学习笔记(三三):Menu(4):Alternative菜单
目录(?)[-] 什么是Alternative menu替代菜单 小例子说明 Alternative menu代码 关于Category和规范代码写法 关于flags 多个匹配的itemId等参数 什 ...
- 【转】 Pro Android学习笔记(五六):配置变化
目录(?)[-] Activity的destorycreate过程 Fragment的destorycreate过程 onSaveInstanceState saveFragmentInstanceS ...
- 【转】 Pro Android学习笔记(六七):HTTP服务(1):HTTP GET
目录(?)[-] HTTP GET小例子 简单小例子 出现异常NetworkOnMainThreadException 通过StrictMode进行处理 URL带键值对 Andriod应用可利用ser ...
- Pro Android学习笔记(一三七):Home Screen Widgets(3):配置Activity
文章转载仅仅能用于非商业性质,且不能带有虚拟货币.积分.注冊等附加条件.转载须注明出处http://blog.csdn.net/flowingflying/以及作者@恺风Wei. 通过widget定义 ...
- 【转】 Pro Android学习笔记(八二):了解Package(1):包和进程
文章转载只能用于非商业性质,且不能带有虚拟货币.积分.注册等附加条件.转载须注明出处:http://blog.csdn.net/flowingflying/ 在之前,我们已经学习了如何签发apk,见P ...
- 【转】 Pro Android学习笔记(七四):HTTP服务(8):使用后台线程AsyncTask
目录(?)[-] 5秒超时异常 AsyncTask 实现AsyncTask抽象类 对AsyncTask的调用 在哪里运行 其他重要method 文章转载只能用于非商业性质,且不能带有虚拟货币.积分.注 ...
- Pro Android学习笔记 ActionBar(1):Home图标区
Pro Android学习笔记(四八):ActionBar(1):Home图标区 2013年03月10日 ⁄ 综合 ⁄ 共 3256字 ⁄ 字号 小 中 大 ⁄ 评论关闭 ActionBar在A ...
随机推荐
- spider_action
spider from mobile to mobile to mobile from selenium import webdriver from selenium.webdriver.chrome ...
- 移动端meta viewport
<meta name="viewport" content=" width=device-width, user-scalable=no, initial-scal ...
- 【网络与系统安全】20179209 wireshark和nmap实验
TCP三次握手包 在进行实验前,先梳理一遍TCP三次握手的过程,这个图是我本科学网络时画过不少于十遍的图,我觉得非常有纪念意义. 稍作解释,第一次握手,客户端发起请求连接,发送一个标志位为SYN的ip ...
- IOS - 执行时 (多态)
一 多态概述 多态指同一操作作用于不同的对象.能够有不同的解释.产生不同的执行结果.它是面向对象程序设计(OOP)的一个重要特征,动态类型能使程序直到执行时才确定对象的所属类.其详细 ...
- Java找出一组数字的最大值
形如:int [] nums = {7,2,8,9,1,12}; 解一:两两比较并记录下标,下次比较拿上次比较的最大值和上次比较的下一个进行比较,循环一次找出最大值 /** * @author 马向峰 ...
- 销售订单、外向交货单、交货 bapi
转自[http://www.cnblogs.com/elegantok/archive/2009/10/18/1585398.html]***********SALES ORDER INPUT CRE ...
- python基础11 ---函数模块1
函数模块 一.函数模块的作用(为什么要有函数模块) 1.函数模块可以减少代码量 2.函数模块方便阅读 3.函数模块维护性强二.函数模块的本质以及调用方法 1.函数模块的本质就是一个.py结尾的文件,该 ...
- OSI 与 TCP/IP
OSI参考模型 物理层(Physical Layer) --- 数据表示.物理层规定了激活.维持.关闭通信端点之间的机械特性.电气特性. 功能特性以及过程特性.该层为上层协 ...
- 期刊搜索问题——SCI、EI、IEEE和中文期刊
1.SCI.EI收录是什么意思? SCI和EI都是收录,并不是实体的期刊出版社,相当于具有高品质期刊出版社的合体(或统充),隔一段时间(几年或者几个月)SCI会进行评估,哪些出版社不具有被SCI收录的 ...
- P3768 【简单的数学题】
P3768 [简单的数学题] \(Ans=\sum ^{n}_{i=1}\sum ^{n}_{j=1}ijgcd(i,j)\) \(=\sum ^{n}_{i=1}\sum ^{n}_{j=1}ij\ ...