转载请注明出处:http://blog.csdn.net/droyon/article/details/41313115

本文主要介绍Preference凭什么Activit一些逻辑的生命周期,使。

1、Preference它是android中的一个基本控件,在Preference以下派生出了SwitchPreference,CheckBoxPreference、ListPreference等众多的控件。

这些控件作为一个结构体,被ListView载入。并依照Preference中自己定义的布局结构inflate出来各种布局。

比如:Preference:

protected View onCreateView(ViewGroup parent) {
final LayoutInflater layoutInflater =
(LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); final View layout = layoutInflater.inflate(mLayoutResId, parent, false); final ViewGroup widgetFrame = (ViewGroup) layout
.findViewById(com.android.internal.R.id.widget_frame);
if (widgetFrame != null) {
if (mWidgetLayoutResId != 0) {
layoutInflater.inflate(mWidgetLayoutResId, widgetFrame);
} else {
// widgetFrame.setVisibility(View.GONE);
}
}
return layout;
}

其它的派生控件,mLayoutResId并无不同,可是字控件多了一些别的控件,比如:SwitchPreference多了一个Switch开关,CheckBoxPreference控件多了一个CheckBox控件。这写多出来的控件,是由mWidgetLayoutResId来控制的。也就是说,mLayoutResId在Preference以及其自控件中并无不同。不同的地方是不同的控件的mWidgetLayoutResId不同。

对于PreferenceActivity:

我们一般在PreferenceActivity的addPreferencesFromResource()方法中进行Preference的实例化。故而addPreferencesFromResource的运行时机等同于onCreateView的运行时机。

对于PreferenceFragment:

我们会在其onActivityCreate方法后运行bingPreference,也就是说bindPreference等同于onCreateView方法的运行。

我们一般在onCreate、onStart或者onResume中进行addPreferenceFromResource方法。

故而:我们能够这样觉得,onCreate、onStart、onResume后我们会调用Preference的构造函数、onCeateView、onBindView方法。

2、当Activity运行到onStop或者onDestory方法时。我们应怎样应对?

Preference能够实现PreferenceManager.OnActivityStopListener接口,而且在Preference内部运行怎样注冊:

getPreferenceManager().registerOnActivityStopListener(this);

那么含有Preference的页面在运行到onStop时,Preference就会回调运行onActivityStop方法。onDestory同理。

其逻辑支持例如以下:

PreferenceActivity:

@Override
protected void onStop() {
super.onStop(); if (mPreferenceManager != null) {
mPreferenceManager.dispatchActivityStop();
}
}

PreferenceFragment:

@Override
public void onStop() {
super.onStop();
mPreferenceManager.dispatchActivityStop();
mPreferenceManager.setOnPreferenceTreeClickListener(null);
}

他们都会调用PreferenceManager的

dispatchActivityStop();

方法:

void dispatchActivityStop() {
List<OnActivityStopListener> list; synchronized (this) {
if (mActivityStopListeners == null) return;
list = new ArrayList<OnActivityStopListener>(mActivityStopListeners);
} final int N = list.size();
for (int i = 0; i < N; i++) {
list.get(i).onActivityStop();
}
}

onDestory同样的方法。

版权声明:本文博主原创文章,博客,未经同意不得转载。

Preference如何增加在activity生命周期监听器的更多相关文章

  1. [转]: 两分钟彻底让你明白Android Activity生命周期(图文)!

    转自:http://blog.csdn.net/android_tutor/article/details/5772285 大家好,今天给大家详解一下Android中Activity的生命周期,我在前 ...

  2. Activity生命周期(深入理解)

    今天看到一篇大神总结Activity的文章,内容甚为详细,特此转载http://www.cnblogs.com/lwbqqyumidi/p/3769113.html Android官方文档和其他不少资 ...

  3. android Activity生命周期(设备旋转、数据恢复等)与启动模式

    1.Activity生命周期     接下来将介绍 Android Activity(四大组件之一) 的生命周期, 包含运行.暂停和停止三种状态,onCreate.onStart.onResume.o ...

  4. Android总结篇系列:Activity生命周期

    Android官方文档和其他不少资料都对Activity生命周期进行了详细介绍,在结合资料和项目开发过程中遇到的问题,本文将对Activity生命周期进行一次总结. Activity是由Activit ...

  5. Andoid activity 生命周期

    今天介绍一下Android中最常用的组件activity的生命周期.当activity处于Android应用中运行时,它的活动状态由Android以Activity栈的形式管理.当前活动的Activi ...

  6. Android开发--Activity生命周期回顾理解

    Activity和Servlet一样,都用了回调机制.我们通过类比servlet来学习Activity.当一个servlet开发出来之后,该servlet运行于Web服务器中.服务器何时创建servl ...

  7. android 17 activity生命周期

    手机指南针传感器处于手机头部. Activity生命周期: 启动. onCreat()方法:初始化布局对象,设置监听器. onstart()方法:注册监听器. onResume():activity已 ...

  8. 【转】Android总结篇系列:Activity生命周期

    [转]Android总结篇系列:Activity生命周期 Android官方文档和其他不少资料都对Activity生命周期进行了详细介绍,在结合资料和项目开发过程中遇到的问题,本文将对Activity ...

  9. 喜闻乐见-Activity生命周期

    Activity的生命周期,对于Android开发者来说,再熟悉不过了.但是我们接触到的资料,绝大部分都只是谈了一些表面上的东西,例如各个回调的顺序等等.本文试图换个角度来讲解,也希望对各位读者有所帮 ...

随机推荐

  1. SharePoint场管理-PowerShell(二)

    1. 合并Log文件 Merge-SPLogFile –Path E:\Logs\MergedLog.log –StartTime "1/19/2010" –Overwrite 2 ...

  2. 使用XML的五种场合,XML基本规则,XML的术语,结构与语法

    在很多研讨会和培训班上我遇到过许多人,他们还不明白为什么要使用XML也不知道如何 在他们的应用中使用XML.一些来自诸如Gartner公司的报告建议说,商业公司不能再做 局外人了,不能对XML置之不理 ...

  3. hdu4055 Number String

    Number String Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Tota ...

  4. 依据不同的操作系统读取配置文件/java读取属性文件代码

    package cn.com.css.common.util; /**  * @brief OSEnum.java 操作系统的枚举  * @attention  * @author 涂作权  * @d ...

  5. linux内核函数之 blk_plug

    分析: /* * blk_plug permits building a queue of related requests by holding the I/O * fragments for a ...

  6. Transparency Tutorial with C# - Part 2

    Download Compositing Mode demo project - 24 Kb Download Compositing Mode source - 26 Kb Download Com ...

  7. 如何解决ORA-12547: TNS:lost contact错

    执行环境:ubuntu+oracle 11.2.0 为了启动oracle时间,出现ORA-12547: TNS:lost contact错误. 中午好好的纳,下午就无论了.以为是链接失效,关机重新启动 ...

  8. Embedded Linux Primer----嵌入式Linux基础教程--前言

    APractical,Real-WorldApproach ChristopherHallinan 计算机无处不在. 事实上,当然了,对于那些大约在过去25年期间没有生活在洞穴中的人来说没有什么惊奇的 ...

  9. DataGirdView 设置单元格居中

    设置标题行居中: dgvShow.ColumnHeadersDefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter ...

  10. VSTO学习笔记(一)VSTO概述

    原文:VSTO学习笔记(一)VSTO概述 接触VSTO纯属偶然,前段时间因为忙于一个项目,在客户端Excel中制作一个插件,从远程服务器端(SharePoint Excel Services)上下载E ...