这个函数是从Dialog.java里找到的:
/**
* @return The activity associated with this dialog, or null if there is no assocaited activity.
*/
private ComponentName getAssociatedActivity() {
Activity activity = mOwnerActivity;
Context context = getContext();
while (activity == null && context != null) {
if (context instanceof Activity) {
activity = (Activity) context; // found it!
} else {
context = (context instanceof ContextWrapper) ?
((ContextWrapper) context).getBaseContext() : // unwrap one level
null; // done
}
}
return activity == null ? null : activity.getComponentName();
}
函数的作用是找到与Dialog关联的Activity的ComponentName,这个复杂的判断逻辑吸引了我,所以把它拿出来分析分析。
这个函数为什么要分析Activity和Context的区分呢,我想可能是在Activity里new这个dialog的时候,有的人是用this来代替this.getApplicationContext()吧,猜测呵呵。如果是的话那么确实会有很大区别。
当然更主要的是Activity是继承自Context的才导致了这个复杂的判断,呵呵
从下面的函数的注释来看,判断这个Dialog的所有者即Activity是为了万一要用到声音控制:
/**
* Sets the Activity that owns this dialog. An example use: This Dialog will
* use the suggested volume control stream of the Activity.
*
* @param activity The Activity that owns this dialog.
*/
public final void setOwnerActivity(Activity activity) {
mOwnerActivity = activity;
getWindow().setVolumeControlStream(mOwnerActivity.getVolumeControlStream());
}
下面这个也能验证我的一个猜测,即Dialog未必都是从Activity里制造出来的,所以才会有返回值是NUll的情况
/**
* Returns the Activity that owns this Dialog. For example, if
* {@link Activity#showDialog(int)} is used to show this Dialog, that
* Activity will be the owner (by default). Depending on how this dialog was
* created, this may return null.
*
* @return The Activity that owns this Dialog.
*/
public final Activity getOwnerActivity() {
return mOwnerActivity;
}
分享到:
相关推荐
### 四、Dialog 源码分析 在 `dialog-1.1-20100428` 这个源码包中,你可以找到 Dialog 的全部源代码和编译脚本。通过阅读源码,你可以深入理解 Dialog 如何处理终端输出、读取用户输入以及如何实现各种对话框组件。...
Dialog是Android SDK中的一个类,它是AlertDialog、ProgressDialog、DatePickerDialog、TimePickerDialog等特定类型对话框的基础。Dialog继承自ContextWrapper,意味着它可以拥有自己的窗口特征和主题,并且可以与...
这通常涉及到创建一个新的XML布局文件来定义对话框的内容,然后在代码中实例化Dialog并设置这个布局。自定义弹框可以包含文本、按钮、输入框等元素,甚至可以添加复杂的视图和逻辑。在实现过程中,需要注意对话框的...
在Android开发中,Dialog是一个非常重要的组件,它用于在用户界面中显示临时的、轻量级的窗口,通常用于向用户展示信息、询问确认或进行交互。本篇将深入探讨Android Dialog的相关知识点,并结合标签“源码”和...
本主题将深入探讨如何在SurfaceView中实现透明且自定义的Dialog和Toast,以及相关的源码分析。 首先,我们来理解SurfaceView。SurfaceView是Android系统提供的一种用于在应用程序中显示复杂动画或视频内容的视图...
系统默认的Dialog主题会包含一个边框,以区分Dialog与背景。为了去除这个边框,我们需要自定义Dialog的主题。在Android项目的res/values目录下,创建或编辑styles.xml文件,定义一个新的主题,例如`...
总的来说,"Embedded_Dialog_src"源码为我们提供了一个学习C++对话框编程的实例,通过深入研究,可以提升我们在实际项目中的开发能力和问题解决技巧。对于那些对C++和GUI编程感兴趣的开发者来说,这是一个宝贵的资源...
在IT行业中,jQuery Dialog是一种广泛使用的插件,用于创建弹出式对话框,提示框,警告框和确认框。...在实际开发中,结合标签中的“源码”和“工具”,这将是一个实用的技巧,有助于提升开发效率。
下面是一个artDialog的实际应用例子,展示了如何创建一个确认删除的对话框: ```html <!DOCTYPE html> <title>artDialog实例 <script src="path/to/artDialog.js"></script> ...
2. **构造函数**: 在自定义Dialog类中,通常会有一个构造函数,接收Activity上下文、主题样式等参数。在这里,开发者可以调用`setContentView()`方法,传入刚才创建的布局文件,将其设置为Dialog的内容视图。 3. **...
在Child Dialog的头文件中,声明一个CScrollCtrl类型的成员变量,如`CScrollCtrl m_scrollBar;`。然后在初始化对话框的DoDataExchange()函数中,使用DDX_Control宏将控件ID与成员变量关联起来。 4. **设置...
Simulink是MATLAB环境下的一个强大的动态系统建模工具,而S函数是Simulink中的核心组件之一,用于创建自定义的系统模型。本教程资料深入浅出地讲解了如何编写和应用S函数,旨在帮助用户提升在Simulink中的建模和仿真...
本文将详细探讨一个基于C++语言的源码项目——"select_computer_dialog_atl_demo",这是一份对于C++开发者来说极具价值的学习资源。这个项目不仅展示了C++的基础应用,还融入了Active Template Library (ATL) 的技术...
Dialog是Android SDK中的一个类,它是AlertDialog的基类。通常,我们通过继承AlertDialog.Builder来创建Dialog实例,设置标题、消息、按钮等属性,然后调用`show()`方法将其展示在屏幕上。例如: ```java new ...
本资源包含一个关于Dialog对话框的源码示例,旨在帮助开发者深入理解如何在Android应用中创建和使用Dialogs。 首先,Dialog对话框在Android中主要有几种类型:AlertDialog、ProgressDialog、DatePickerDialog、...
1. 创建Dialog实例:通过调用Dialog(Context context)构造函数,传入一个上下文对象。 2. 设置主题:使用setTheme(int themeResId)方法可以设置Dialog的主题风格。 3. 布局填充:通过setContentView(int layoutResID...
在源码中,你可能会看到如何将这些步骤整合到一起,形成一个完整的无边框Dialog解决方案。这不仅可以应用于毕业设计,也可以应用于其他Android应用开发项目,以提供更好的用户体验。 此外,这个项目还可能涉及到...
本篇文章将深入解析名为"HerilyAlertDialog"的高级应用源码,带领读者探索如何实现一个完全自定义的Dialog。 首先,我们了解自定义Dialog的基本步骤。创建自定义Dialog通常包括以下部分: 1. **布局文件**:设计...
4. **日期选择器(Datepicker)**:提供了一个易于使用的日历组件,方便用户选择日期。 5. **效果(Effects)**:jQuery UI 提供了诸如淡入淡出、滑动等视觉效果,并支持自定义动画。 **jQuery 源码分析** 深入...
"Quick Dialog选择框"是一个在Android开发中常用的库,它为开发者提供了快速创建对话框的能力,简化了原生Android API的复杂性。这篇博客可能是作者`username2`在iteye.com上分享的一个关于如何利用Quick Dialog库来...