Android PreferenceActivity源码分析与使用总结

· PreferenceActivity可以显示一系列Header,每一个Header可以关联一个Fragment或者Activity。此外,它还可以直接显示Preference条目。

· PreferenceActivity显示Header的时候有两种模式:single panetwo panes;如果是Fragment,那么在two panes模式下,也就是大屏模式下,它可以同时显示HeaderFragment,这充分利用了屏幕的空间。而在singlepane模式下只会显示Header,无论如何,我们都可以在Header关联的Fragment中再显示Preference条目。

如上描述可用示意图标示:


在介绍它的使用方法之前,为了更好的理解PreferenceActivity,我会先对源码做一个简单的分析,分析结束后再介绍它的用法,包括显示Header和显示preference,这样更容易理解为什么会这么使用。

这里的Preference指的是显示在PreferenceActivity中的UI构建块,例如ListPreference,CheckBoxPreference等,他们都是Preference的子类(非直接):


一.源码分析

这里主要介绍分析PreferenceActivity中的Header,onBuildHeaders,加载Preference,加载Header,事件处理等内容,下图是简单概要:


1.继承关系:


可以看到PreferenceActivity继承自ListActivity,ListActivity是一个封装了ListViewActivity,ListActivity中给ListView设置了事件监听器:

mList.setOnItemClickListener(mOnClickListener);


这个事件监听器是这样的:

    private AdapterView.OnItemClickListener mOnClickListener = new AdapterView.OnItemClickListener() {

        public void onItemClick(AdapterView<?> parent, View v, int position, long id)

        {

            onListItemClick((ListView)parent, v, position, id);

        }

    };


可以看到在监听器中,又简单调用了onListItemClick方法,这个方法的定义如下:

    protected void onListItemClick(ListView l, View v, int position, long id) {

    }

它是一个空的方法,如果你的Activity继承自ListActivity,想处理ListView的事件的话,只需要重写这个方法。

ListActivity中提供了给ListView设置适配器的接口,但是适配器还得自己去写,因此可以说ListActivity功能有限。PreferenceActivity继承了ListActivity,那么它当然主要是一个ListView了,那么它会怎样给ListView设置适配器呢?它又怎样处理按键事件?

2.Header

HeaderPreferenceActivity一个非常重要的概念,PreferenceActivity可以显示一系列的Header,每一个Header可以给它关联一个fragment,这样当你点击这个Header时,就会打开它关联的fragment,但是不局限于此,从源码来看,如果没有关联Fragment,那么也可以设置Intent,此时,可以通过Intent打开对应的Activity

这个类还有两种模式,singlepanetwo panes,分别针对小屏幕设备和大屏幕设备。对小屏幕设备而言,屏幕只会显示

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值