Android应用Preference相关及源码浅析(Preference组件家族篇)

本文深入探讨了Android中的Preference组件家族,包括PreferenceFragment和PreferenceManager的使用,以及Preference源码分析。PreferenceFragment是处理碎片化问题的类,PreferenceManager用于管理SharedPreferences。此外,文章还介绍了Preference控件家族的实例和使用方法,以及如何通过addPreferencesFromResource加载偏好设置。在源码解析部分,详细剖析了PreferenceFragment和PreferenceActivity的工作原理,展示了Preference如何与ListView和Adapter交互以显示设置项。
摘要由CSDN通过智能技术生成

| 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控件家族的使用比较简单,自定义网上也一大把,所以不再给出例子。如果你想看例子可以参考如下:

其他的相关用法参考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) {

//判断异常说明了该方

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值