python的preference设置_Android首选项(一) RingtonePreference详解

本文详细探讨了在Android开发中使用RingstonePreference时遇到的问题及解决方案。特别关注如何通过SharedPreferences编辑器实现setValue和getValue方法,并提供了具体的代码示例。
摘要由CSDN通过智能技术生成

很久没有发博客了,这次试用android的Preference遇到了一些问题,虽然解决方案最后都很轻松,但是过分依赖于找资料的过程可不是很轻松。好了废话不多说,中文搜索出来的首选项都是最最基础的解释和demo,这吧遇到的问题说一说,下面先来说RingstonePreference的问题:

试用RingstonePreference相比于其他的Preference提供的方法感觉略显单薄,尤其setValue、getValue没有提供,就在下一次进入初始化(因为默认试用上一次的,所以试用首选项时记得activity初次加载的时候数据还原)和获取值的时候遇到问题。

今天set的方法在这里搜到了最接近的答案:

其实这个里面的问题只是没有commit

Editor edit=ringPreference.getSharedPreferences().edit();

edit.putString(ringPreference.getKey(), alarm.getRingSource());

edit.commit();

set的方法就是这样的,

下面先附上get的方法,这个比较简单

ringPreference.getSharedPreferences().getString(ringPreference.getKey(), "");

开始纠结于找不到set方法,最后无奈了去看源码,然后所有问题都迎刃而解了,不过在你并不对这些数据能非常简单的控制的时候最好使用上面两种方法,然后其他情况就用到这里了,这里有几个protected方法

protected void onSaveRingtone(Uri ringtoneUri) {

persistString(ringtoneUri != null ? ringtoneUri.toString() : "");

}

再看父类Preference中的两个

protected boolean persistString(String value) {

if (shouldPersist()) {

// Shouldn't store null

if (value == getPersistedString(null)) {

// It's already there, so the same as persisting

return true;

}

SharedPreferences.Editor editor = mPreferenceManager.getEditor();

editor.putString(mKey, value);

tryCommit(editor);

return true;

}

return false;

}

protected String getPersistedString(String defaultReturnValue) {

if (!shouldPersist()) {

return defaultReturnValue;

}

return mPreferenceManager.getSharedPreferences().getString(mKey, defaultReturnValue);

}

这里应该很清晰了,当然,api提供了能获取到值的路径,但也为我们重新构造最适合特定项目中使用的机制,只需要简单的在public方法中super一下就成功了,其他还有很多方法可以构造更有用途的方法,这里就个常用的例子。

因此你可以很方便的构造自己的Preference(在开发过程中其实会用到很多自己重写的Preference,因为有些情况方法没有提供,也有可能会有需要对getValue解析等等很多情况。父类中几乎大多都是protected方法,给重写带来很多方便),Preference为开发提供了很多遍历,这里跟大家分享了

附上父类源码地址:

分享到:

2012-05-21 15:56

浏览 7241

评论

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值