您的位置:首页 > Web前端

拖延良久,终于开始了博客之旅(preference)

2016-06-12 20:43 531 查看
心里一直想着要写些什么东西,技术也好,心情也罢。总之要记录自己的生活,可是偏偏爱拖延。假期的小聚让我看到了更多别人的故事,发现每个人都有自己苦恼的事情,尽管他平时看上去十分快乐。生活不会完美,要学会欣赏其中的景色;自己不会完美,要学会接纳自己的平凡。还是记录下关于技术的吧

preference,google写好的关于存储“设置类”信息的方便类。可以将用户的习惯设置保存到SharedPreference文件夹下。先看一个简单的例子

1 xml布局,此处需要在res下建个xml文件夹

<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" >

<PreferenceCategory android:title="personal" >
<EditTextPreference
android:key="name"
android:title="name" />
</PreferenceCategory>
</PreferenceScreen>
2 activity/fragment  extents  PreferenceActivity/PreferenceFragment
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.activity_main);
}
到此,你的页面中已经显示了一个名字的设置项,此时会发现,我去输入名字,页面并没有显示,如果你的手机root了,可以发现xml中保存了信息,这是为什么呢?原因有两点:
1xml中信息以key-value形式保存,value用summary来显示,我们可以在onCreate或者onResume中去加载。

sp = getPreferenceManager().getDefaultSharedPreferences(getApplicationContext());
String name = sp.getString("name", "");
findPreference("name").setSummary(name);
这样的话内容就可以显示了。此时问题又来了,我再去修改值,并没有生效。

2 即页面的实时刷新问题,google也帮我们做好了,这里提供一种方式,activity/fragment实现OnSharedPreferenceChangeListener

@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences,String key) {
update();
}

private void update() {
sp = getPreferenceManager().getDefaultSharedPreferences(getApplicationContext());
String name = sp.getString("name", "");
findPreference("name").setSummary(name);
}
此时你的设置项就可以用了。刚才的例子非常的简单,接下来对整体的知识做一个梳理
1xml

1.1根节点PreferenceScreen会占整个屏幕,如果你的某个设置项需要整个屏幕显示,可以嵌套PreferenceScreen

1.2PreferenceCategory,我的例子中并没有说明,但是顾名思义,就是分类的意思,强迫症患者的福音。比如说,某个Category下的xxxPreference没有设置内容,就让该Category隐藏,也是本人工作中遇到过的需求。这里提供思路:加载xxxPreference的value,如果所有value都是默认值,此时getPreferenceScreen().removePreference(preference);

1.3xxxPreference

1.3.1EditTextPreference,类似EditText,可以保存文字类的信息

1.3.2CheckBoxPreference,类似CheckBox,选择

1.3.3ListPreference,单选

1.3.4MultiSelectListPreference,多选

1.3.5RingtonePreference,铃声

1.3.6SwitchPreference,滑块开关,(个人觉得UI挺简洁美观)
详细介绍来了。这些preferfence都有些共同的属性,这里一块说明

key
preference的“身份证”

value
key-value,不解释

title
标题

summary
小标题(例子中用来显示用户输入的名字)

entries 
单选/多选,显示的选择项

entryValues
对应entries的key-valued形式

2点击事件

onPreferenceChange,点击对话框的“确定”时触发,需要手动保存

onPreferenceClick,点击xxxPreference时触发,返回false时会继续调用onPreferenceTreeClick

第一次写东西,内容比较简单,都是自己的体会,格式上可能还有些问题 。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  技术 存储