| public void startWithFragment(……) | 启动一个新的fragment。 |
| public void switchToHeader(……) | 在大屏multi-pane模式下切换到fragment显示给定参数的fragment。 |
2-4-2 PreferenceFragment相关属性方法使用基础
翻墙点我查看。PreferenceFragment继承自Fragment,这个类是3.0以后推荐使用的,用来处理碎片化问题。
该类的常用方法和上面PreferenceActivity的介绍差不多,这里不再详细说明,只是PreferenceActivity的@deprecated方法在PreferenceFragment中不是@deprecated的而已。
2-4-3 PreferenceManager相关方法使用基础
翻墙点我查看。PreferenceManager继承自Object,这个类其实我们前一篇《Android应用Preference相关及源码浅析(SharePreferences篇)》获取Preference实例就该说明的,这里才说而已。
Android中得到SharedPreference的方式有四种:
- ContextWrapper.getSharedPreferences(String name, int mode)
可以自己设置SharedPreference的名字与模式。
- Activity.getPreferences(int mode)
name是Activity名字,不能设置。
- PreferenceManager.getSharedPreferences()
通过PreferenceManager维护一个SharedPreference,我们可以调用PreferenceManager的API来设置name和mode,并且最终也是调用到ContextWrapper的getSharedPreferences。
- PreferenceManager.getDefaultSharedPreferences(Context context)
得到的SharedPreference是某个包名下共享私有的,不能让其他的包访问,而且name和mode不能设置,最终也会调用到ContextWrapper的getSharedPreferences。
接下来简单看下PreferenceManager相关方法,如下:
| method | description |
| — | — |
| PreferenceManager.OnActivityDestroyListener | 当所依赖的activity销毁时回调接口。 |
| PreferenceManager.OnActivityResultListener | 当所依赖的activity得到返回result时回调接口。 |
| PreferenceManager.OnActivityStopListener | 当所依赖的activity停止时回调接口。 |
| public Preference findPreference(CharSequence key) | 通过key找到Preference。 |
| public static SharedPreferences getDefaultSharedPreferences(Context context) | 每个应用有一个默认的preferences文件,通过该方法获取。 |
| public SharedPreferences getSharedPreferences() | 通过PreferenceManager维护一个SharedPreference,可以调用PreferenceManager的API来设置name和mode。 |
| public int getSharedPreferencesMode() | 获取当前的mode。 |
| public String getSharedPreferencesName() | 获取当前的name。 |
| public static void setDefaultValues(Context context, String sharedPreferencesName, int sharedPreferencesMode, int resId, boolean readAgain) | 更加灵活的设置默认值,注意readAgain参数。 |
| public static void setDefaultValues(Context context, int resId, boolean readAgain) | 设置默认值,注意readAgain参数。 |
| public void setSharedPreferencesMode(int sharedPreferencesMode) | 设置当前的mode。 |
| public void setSharedPreferencesName(String sharedPreferencesName) | 设置当前的name。 |
可以看见,这个类其实也没啥介绍的,重点关注下setDefaultValues的几个核心参数就行。如果我们的设置项很多,而且每项在代码中都需要设置默认缺省值,那就推荐使用setDefaultValues方法。在应用第一次运行时,从preference的xml中获取缺省值,并生成文件保存(如果已经有一个SharedPrefferences对象,也会进行更新,就像下面代码中三四行对调);不是第一运行就不会改现有保存值。
protected void onCreate(Bundle savedInstanceState) {
…
PreferenceManager.setDefaultValues(this, R.xml.default_value, false);
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
String option = prefs.getString(“key”, null);
}
好了,控件使用就到这里了。
2-5 Preference控件家族实例
关于Preference控件家族的使用比较简单,自定义网上也一大把,所以不再给出例子。如果你想看例子可以参考如下:
-
Settings源码。
其他的相关用法参考API及网络例子。
【工匠若水 http://blog.csdn.net/yanbober 转载请注明出处。点我开始Android技术交流】
3 Preference组件源码设计简单分析
扯蛋了这么多,唉,叹个气继续吧,接下来就到了有意思的环节,源码结构简介。这里只是针对Preference控件特性介绍分析,不会过多追究View及Activity和Fragment细节,具体View及Activity和Fragment细节后面会写文章分析的。
3-1 PreferenceFragment源码浅析
首先还记得上面基础说了,PreferenceFragment使用第一步就是使用其内部方法addPreferencesFromResource或者addPreferencesFromIntent设置源。所以这里我们以addPreferencesFromResource为例来说明,如下源码:
//PreferenceFragment的方法
public void addPreferencesFromResource(int preferencesResId) {
//判断异常说明了该方