Preference如何增加在activity生命周期监听器
转载请注明出处: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生命周期监听器的更多相关文章
- [转]: 两分钟彻底让你明白Android Activity生命周期(图文)!
转自:http://blog.csdn.net/android_tutor/article/details/5772285 大家好,今天给大家详解一下Android中Activity的生命周期,我在前 ...
- Activity生命周期(深入理解)
今天看到一篇大神总结Activity的文章,内容甚为详细,特此转载http://www.cnblogs.com/lwbqqyumidi/p/3769113.html Android官方文档和其他不少资 ...
- android Activity生命周期(设备旋转、数据恢复等)与启动模式
1.Activity生命周期 接下来将介绍 Android Activity(四大组件之一) 的生命周期, 包含运行.暂停和停止三种状态,onCreate.onStart.onResume.o ...
- Android总结篇系列:Activity生命周期
Android官方文档和其他不少资料都对Activity生命周期进行了详细介绍,在结合资料和项目开发过程中遇到的问题,本文将对Activity生命周期进行一次总结. Activity是由Activit ...
- Andoid activity 生命周期
今天介绍一下Android中最常用的组件activity的生命周期.当activity处于Android应用中运行时,它的活动状态由Android以Activity栈的形式管理.当前活动的Activi ...
- Android开发--Activity生命周期回顾理解
Activity和Servlet一样,都用了回调机制.我们通过类比servlet来学习Activity.当一个servlet开发出来之后,该servlet运行于Web服务器中.服务器何时创建servl ...
- android 17 activity生命周期
手机指南针传感器处于手机头部. Activity生命周期: 启动. onCreat()方法:初始化布局对象,设置监听器. onstart()方法:注册监听器. onResume():activity已 ...
- 【转】Android总结篇系列:Activity生命周期
[转]Android总结篇系列:Activity生命周期 Android官方文档和其他不少资料都对Activity生命周期进行了详细介绍,在结合资料和项目开发过程中遇到的问题,本文将对Activity ...
- 喜闻乐见-Activity生命周期
Activity的生命周期,对于Android开发者来说,再熟悉不过了.但是我们接触到的资料,绝大部分都只是谈了一些表面上的东西,例如各个回调的顺序等等.本文试图换个角度来讲解,也希望对各位读者有所帮 ...
随机推荐
- Face Alignment at 3000FPS(C++版)工程配置
源地址:http://blog.csdn.net/sunshine_in_moon/article/details/49838245/ 3000FPS是人脸对齐算法,特点是速度快!我利用的是think ...
- Types of Windows
The Window's Real Estate Application's Instance A window is referred to as parent when it can be ...
- 奋斗的孩子的TableView(三篇文章)
http://blog.sina.com.cn/s/blog_a6fb6cc90101i8it.html http://blog.sina.com.cn/s/blog_a6fb6cc90101hhse ...
- 玩转Windows服务系列——创建Windows服务
原文:玩转Windows服务系列——创建Windows服务 创建Windows服务的项目 新建项目->C++语言->ATL->ATL项目->服务(EXE) 这样就创建了一个Wi ...
- phpStorm打开提示 failed to create JVM 的解决的方法
phpStorm 软件打开执行提示 failed to create JVM的解决的方法. 改动文件 D:\Program Files (x86)\JetBrains\PhpStorm 7.1.3\b ...
- 模块化手机project ara之我见
组装电脑,已被大部分人所熟知,只是像玩具一样组装手机,应该还仅仅是停留在想象.谷歌Project Ara将这一想象一步一步拉进现实,她希望提供一块框架,使用者能够自由地替换摄像头.显示屏.处理器.电池 ...
- VMware vSphere 服务器虚拟化之二十八 桌面虚拟化之安装View传输服务器
VMware vSphere 服务器虚拟化之二十八 桌面虚拟化之安装View传输服务器 View 传输服务器用于管理和简化数据中心与在最终用户本地系统上检出使用的 View 桌面之间的数据传输.必须安 ...
- Oschat IM 开源即时通讯项目介绍 - FengJ的个人页面 - 开源中国社区
Oschat IM 开源即时通讯项目介绍 - FengJ的个人页面 - 开源中国社区 Oschat IM 开源即时通讯项目介绍 255人收藏此文章, 我要收藏 发表于5天前(2013-08-28 ...
- HDOJ/HDU 2717 Catch That Cow 一维广度优先搜索 so easy..............
看题:http://acm.hdu.edu.cn/showproblem.php?pid=2717 思路:相当于每次有三个方向,加1,减1,乘2,要注意边界条件,减1不能小于0,乘2不能超过最大值. ...
- Perl语言学习笔记 9 正则表达式处理文本
1.更换 s/PATTERN/REPLACE/; #返回是否更换成功布尔值 能够使用捕获变量,如:s/(\w)/$1/ 匹配失败则不做不论什么处理 2.定界符 对于没有左右之分的定界符.反复三次就可以 ...