`
384444165
  • 浏览: 260813 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Android首选项(一) RingtonePreference详解

 
阅读更多

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

 

 

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

 

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

http://stackoverflow.com/questions/6061598/how-to-set-ringtonepreference-value-from-code

其实这个里面的问题只是没有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为开发提供了很多遍历,这里跟大家分享了

 

附上父类源码地址:

http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/1.5_r4/android/preference/RingtonePreference.java

分享到:
评论

相关推荐

    详解Android应用中preference首选项的编写方法

    【Android首选项Preference详解】 首选项(Preference)在Android应用中主要用于实现用户的个性化设置,即用户可以根据自己的喜好调整应用的一些参数。它是Android系统提供的一种便捷的数据存储方式,通常用于存储...

    android中PreferenceActivity详解

    标题与描述均提及了《Android中PreferenceActivity详解》,这一主题涉及了Android开发中关于用户偏好设置的核心组件——PreferenceActivity的深入解析。以下是基于标题、描述、标签以及部分内容的关键知识点总结,...

    详解Android首选项框架的使用实例

    1. 创建首选项的XML配置文件:在/res/xml目录下创建一个XML文件,例如`preferences.xml`,定义各个首选项的键值对和属性。 ```xml <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">...

    Android之PreferenceActivity简介

    ### Android之PreferenceActivity详解 #### 一、PreferenceActivity概述 **PreferenceActivity** 是Android系统提供的一种专门用于展示和管理应用设置界面的Activity。它能够帮助开发者快速构建美观且功能丰富的...

    Android至PreferenceActivity

    ### Android之PreferenceActivity详解 #### 一、Introduction 在Android开发过程中,经常需要为应用提供一个用户可配置的界面,以便于用户能够调整各种设置。PreferenceActivity正是Android平台提供的一个非常实用...

Global site tag (gtag.js) - Google Analytics