`
dingran
  • 浏览: 374848 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Dialog中的一个函数的源码分析

 
阅读更多

这个函数是从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 源码分析 在 `dialog-1.1-20100428` 这个源码包中,你可以找到 Dialog 的全部源代码和编译脚本。通过阅读源码,你可以深入理解 Dialog 如何处理终端输出、读取用户输入以及如何实现各种对话框组件。...

    安卓Android源码——所有Dialog对话框.zip

    Dialog是Android SDK中的一个类,它是AlertDialog、ProgressDialog、DatePickerDialog、TimePickerDialog等特定类型对话框的基础。Dialog继承自ContextWrapper,意味着它可以拥有自己的窗口特征和主题,并且可以与...

    Android之对话框Dialog(博客源码)

    这通常涉及到创建一个新的XML布局文件来定义对话框的内容,然后在代码中实例化Dialog并设置这个布局。自定义弹框可以包含文本、按钮、输入框等元素,甚至可以添加复杂的视图和逻辑。在实现过程中,需要注意对话框的...

    android dialog

    在Android开发中,Dialog是一个非常重要的组件,它用于在用户界面中显示临时的、轻量级的窗口,通常用于向用户展示信息、询问确认或进行交互。本篇将深入探讨Android Dialog的相关知识点,并结合标签“源码”和...

    android透明的自定义Dialog和Toast在SurfaceView中的展示源码

    本主题将深入探讨如何在SurfaceView中实现透明且自定义的Dialog和Toast,以及相关的源码分析。 首先,我们来理解SurfaceView。SurfaceView是Android系统提供的一种用于在应用程序中显示复杂动画或视频内容的视图...

    Android应用源码之dialog去除边框代码_dialog.zip

    系统默认的Dialog主题会包含一个边框,以区分Dialog与背景。为了去除这个边框,我们需要自定义Dialog的主题。在Android项目的res/values目录下,创建或编辑styles.xml文件,定义一个新的主题,例如`...

    Embedded_Dialog_src源码

    总的来说,"Embedded_Dialog_src"源码为我们提供了一个学习C++对话框编程的实例,通过深入研究,可以提升我们在实际项目中的开发能力和问题解决技巧。对于那些对C++和GUI编程感兴趣的开发者来说,这是一个宝贵的资源...

    封装JQuery Dialog实现Dialog、Tip、alert和confirm

    在IT行业中,jQuery Dialog是一种广泛使用的插件,用于创建弹出式对话框,提示框,警告框和确认框。...在实际开发中,结合标签中的“源码”和“工具”,这将是一个实用的技巧,有助于提升开发效率。

    artDialog源码以及封装、实例

    下面是一个artDialog的实际应用例子,展示了如何创建一个确认删除的对话框: ```html <!DOCTYPE html> <title>artDialog实例 <script src="path/to/artDialog.js"></script> ...

    Android例子源码HerilyAlertDialog完全自定义的Dialog

    2. **构造函数**: 在自定义Dialog类中,通常会有一个构造函数,接收Activity上下文、主题样式等参数。在这里,开发者可以调用`setContentView()`方法,传入刚才创建的布局文件,将其设置为Dialog的内容视图。 3. **...

    tab页中child属性的Dialog里scrollbar的初步使用

    在Child Dialog的头文件中,声明一个CScrollCtrl类型的成员变量,如`CScrollCtrl m_scrollBar;`。然后在初始化对话框的DoDataExchange()函数中,使用DDX_Control宏将控件ID与成员变量关联起来。 4. **设置...

    simulink中s函数的教程资料—s函数编写与仿真

    Simulink是MATLAB环境下的一个强大的动态系统建模工具,而S函数是Simulink中的核心组件之一,用于创建自定义的系统模型。本教程资料深入浅出地讲解了如何编写和应用S函数,旨在帮助用户提升在Simulink中的建模和仿真...

    select_computer_dialog_atl_demo源码

    本文将详细探讨一个基于C++语言的源码项目——"select_computer_dialog_atl_demo",这是一份对于C++开发者来说极具价值的学习资源。这个项目不仅展示了C++的基础应用,还融入了Active Template Library (ATL) 的技术...

    应用源码之(Dialog对话框.zip

    Dialog是Android SDK中的一个类,它是AlertDialog的基类。通常,我们通过继承AlertDialog.Builder来创建Dialog实例,设置标题、消息、按钮等属性,然后调用`show()`方法将其展示在屏幕上。例如: ```java new ...

    Android应用源码之(Dialog对话框.zip

    本资源包含一个关于Dialog对话框的源码示例,旨在帮助开发者深入理解如何在Android应用中创建和使用Dialogs。 首先,Dialog对话框在Android中主要有几种类型:AlertDialog、ProgressDialog、DatePickerDialog、...

    Android源码-Dialog对话框类源代码(8例).zip

    1. 创建Dialog实例:通过调用Dialog(Context context)构造函数,传入一个上下文对象。 2. 设置主题:使用setTheme(int themeResId)方法可以设置Dialog的主题风格。 3. 布局填充:通过setContentView(int layoutResID...

    Android应用源码之dialog去除边框代码-IT计算机-毕业设计.zip

    在源码中,你可能会看到如何将这些步骤整合到一起,形成一个完整的无边框Dialog解决方案。这不仅可以应用于毕业设计,也可以应用于其他Android应用开发项目,以提供更好的用户体验。 此外,这个项目还可能涉及到...

    Android高级应用源码-HerilyAlertDialog完全自定义的Dialog.zip

    本篇文章将深入解析名为"HerilyAlertDialog"的高级应用源码,带领读者探索如何实现一个完全自定义的Dialog。 首先,我们了解自定义Dialog的基本步骤。创建自定义Dialog通常包括以下部分: 1. **布局文件**:设计...

    jquery api, jquery ui api, jquery源码分析

    4. **日期选择器(Datepicker)**:提供了一个易于使用的日历组件,方便用户选择日期。 5. **效果(Effects)**:jQuery UI 提供了诸如淡入淡出、滑动等视觉效果,并支持自定义动画。 **jQuery 源码分析** 深入...

    Dialog DA14531 SDK

    Dialog半导体公司的DA14531是一款高性能、低功耗的Bluetooth Low Energy (BLE) 5.2 SoC(系统级芯片),它专为可穿戴设备、智能家居产品、健康监测器和其他物联网应用设计。其SDK(软件开发工具包)是开发者进行产品...

Global site tag (gtag.js) - Google Analytics