`
阅读更多

--------------------------------------------CallUp.java-------------------------------------

package com.ch07.callback;

 

/**

 * 

 * 项目名称:com.ch07.callback    

 * 类名称:CallUp    

 * 类描述: 打电话类

 * 创建人:fy   

 * 创建时间:2012-11-9 下午6:28:38   

 * Copyright (c) 方勇-版权所有

 */

public class CallUp {

 

/* 打电话,回调方法 */

public void callme(OnCallBack onCallBack) {

onCallBack.execute();

}

 

/* 接口作为参数传递 */

public interface OnCallBack {

 

void execute();

}

}

 

--------------------------------------------TestCall.java-------------------------------------

package com.ch07.callback;

 

/**

 * 

 * 场景描述:  

 * 

 * java回调函数 

 * 什么是回调?(What) 

 * 精妙比喻:我把手机号码给你,你通过手机号码联系我

 

 * 具体解释:

 * 我把我的手机号码给你,你通过电话号码打电话 联系我

 * 我把我的手机号码给你,你通过电话号码发短信 联系我

 

 * 共同的部分:

 * 我把我的手机号码给你,你通过电话号码(****)联系我

 

 * 不同的部分

 * 每次在使用的时候,选择是打电话或是发短信。

 

 * 回调都做了什么? 

 * 将变动与不变的代码分离,变动的代码在每次使用时确认

 

 * 什么情况使用回调?为什么要使用回调? 

 * 步骤固定,但有一部分内容只有在使用的时候才能知道。

 * 

 */

public class TestCall {

 

public static void main(String[] args) {

/* 实例化电话类 */

CallUp callUp = new CallUp();

/* 拨打对方的电话,只需要知道对方的手机号码 */

callUp.callme(new CallUp.OnCallBack() {

 

@Override

public void execute() {

System.out.println("回调方法");

}

 

});

}

}

--------------------------------------------DatePickerDialog.java---------------------------------

/*

 * Copyright (C) 2007 The Android Open Source Project

 *

 * Licensed under the Apache License, Version 2.0 (the "License");

 * you may not use this file except in compliance with the License.

 * You may obtain a copy of the License at

 *

 *      http://www.apache.org/licenses/LICENSE-2.0

 *

 * Unless required by applicable law or agreed to in writing, software

 * distributed under the License is distributed on an "AS IS" BASIS,

 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

 * See the License for the specific language governing permissions and

 * limitations under the License.

 */

 

package android.app;

 

import android.content.Context;

import android.content.DialogInterface;

import android.content.DialogInterface.OnClickListener;

import android.os.Bundle;

import android.text.format.DateUtils;

import android.view.LayoutInflater;

import android.view.View;

import android.widget.DatePicker;

import android.widget.DatePicker.OnDateChangedListener;

 

import com.android.internal.R;

 

import java.util.Calendar;

 

/**

 * A simple dialog containing an {@link android.widget.DatePicker}.

 *

 * <p>See the <a href="{@docRoot}resources/tutorials/views/hello-datepicker.html">Date Picker

 * tutorial</a>.</p>

 */

public class DatePickerDialog extends AlertDialog implements OnClickListener,

        OnDateChangedListener {

 

    private static final String YEAR = "year";

    private static final String MONTH = "month";

    private static final String DAY = "day";

 

    private final DatePicker mDatePicker;

    private final OnDateSetListener mCallBack;

    private final Calendar mCalendar;

 

    private boolean mTitleNeedsUpdate = true;

 

    /**

     * The callback used to indicate the user is done filling in the date.

     */

    public interface OnDateSetListener {

 

        /**

         * @param view The view associated with this listener.

         * @param year The year that was set.

         * @param monthOfYear The month that was set (0-11) for compatibility

         *  with {@link java.util.Calendar}.

         * @param dayOfMonth The day of the month that was set.

         */

        void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth);

    }

 

    /**

     * @param context The context the dialog is to run in.

     * @param callBack How the parent is notified that the date is set.

     * @param year The initial year of the dialog.

     * @param monthOfYear The initial month of the dialog.

     * @param dayOfMonth The initial day of the dialog.

     */

    public DatePickerDialog(Context context,

            OnDateSetListener callBack,

            int year,

            int monthOfYear,

            int dayOfMonth) {

        this(context, 0, callBack, year, monthOfYear, dayOfMonth);

    }

 

    /**

     * @param context The context the dialog is to run in.

     * @param theme the theme to apply to this dialog

     * @param callBack How the parent is notified that the date is set.

     * @param year The initial year of the dialog.

     * @param monthOfYear The initial month of the dialog.

     * @param dayOfMonth The initial day of the dialog.

     */

    public DatePickerDialog(Context context,

            int theme,

            OnDateSetListener callBack,

            int year,

            int monthOfYear,

            int dayOfMonth) {

        super(context, theme);

 

        mCallBack = callBack;

 

        mCalendar = Calendar.getInstance();

 

        Context themeContext = getContext();

        setButton(BUTTON_POSITIVE, themeContext.getText(R.string.date_time_done), this);

        setIcon(0);

 

        LayoutInflater inflater =

                (LayoutInflater) themeContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

        View view = inflater.inflate(R.layout.date_picker_dialognull);

        setView(view);

        mDatePicker = (DatePicker) view.findViewById(R.id.datePicker);

        mDatePicker.init(year, monthOfYear, dayOfMonth, this);

        updateTitle(year, monthOfYear, dayOfMonth);

    }

 

    public void onClick(DialogInterface dialog, int which) {

        tryNotifyDateSet();

    }

 

    public void onDateChanged(DatePicker view, int year,

            int month, int day) {

        mDatePicker.init(year, month, day, this);

        updateTitle(year, month, day);

    }

 

    /**

     * Gets the {@link DatePicker} contained in this dialog.

     *

     * @return The calendar view.

     */

    public DatePicker getDatePicker() {

        return mDatePicker;

    }

 

    /**

     * Sets the current date.

     *

     * @param year The date year.

     * @param monthOfYear The date month.

     * @param dayOfMonth The date day of month.

     */

    public void updateDate(int year, int monthOfYear, int dayOfMonth) {

        mDatePicker.updateDate(year, monthOfYear, dayOfMonth);

    }

 

    private void tryNotifyDateSet() {

        if (mCallBack != null) {

            mDatePicker.clearFocus();

            mCallBack.onDateSet(mDatePickermDatePicker.getYear(),

                    mDatePicker.getMonth(), mDatePicker.getDayOfMonth());

        }

    }

 

    @Override

    protected void onStop() {

        tryNotifyDateSet();

        super.onStop();

    }

 

    private void updateTitle(int year, int month, int day) {

        if (!mDatePicker.getCalendarViewShown()) {

            mCalendar.set(Calendar.YEAR, year);

            mCalendar.set(Calendar.MONTH, month);

            mCalendar.set(Calendar.DAY_OF_MONTH, day);

            String title = DateUtils.formatDateTime(mContext,

                    mCalendar.getTimeInMillis(),

                    DateUtils.FORMAT_SHOW_DATE

                    | DateUtils.FORMAT_SHOW_WEEKDAY

                    | DateUtils.FORMAT_SHOW_YEAR

                    | DateUtils.FORMAT_ABBREV_MONTH

                    | DateUtils.FORMAT_ABBREV_WEEKDAY);

            setTitle(title);

            mTitleNeedsUpdate = true;

        } else {

            if (mTitleNeedsUpdate) {

                mTitleNeedsUpdate = false;

                setTitle(R.string.date_picker_dialog_title);

            }

        }

    }

 

    @Override

    public Bundle onSaveInstanceState() {

        Bundle state = super.onSaveInstanceState();

        state.putInt(YEARmDatePicker.getYear());

        state.putInt(MONTHmDatePicker.getMonth());

        state.putInt(DAYmDatePicker.getDayOfMonth());

        return state;

    }

 

    @Override

    public void onRestoreInstanceState(Bundle savedInstanceState) {

        super.onRestoreInstanceState(savedInstanceState);

        int year = savedInstanceState.getInt(YEAR);

        int month = savedInstanceState.getInt(MONTH);

        int day = savedInstanceState.getInt(DAY);

        mDatePicker.init(year, month, day, this);

    }

}

 

<!--EndFragment-->

0
0
分享到:
评论

相关推荐

    ch07 Android 日期与时间对话框

    它们提供了回调机制,以便在用户更改选择时更新数据。 在处理日期和时间时,通常会用到`java.util.Calendar`和`java.time`(在Android API 26及以上版本)包中的类。`Calendar`类提供了日期和时间的抽象表示,而`...

    ch07_android开发_

    本章"ch07_android开发_"将深入探讨ListView的使用,从基础到高级技巧,帮助开发者掌握这一核心功能。 1. **ListView基本使用**:ListView是Android中用于显示可滚动列表的视图,通常用于显示大量数据。它通过...

    ch07_android开发_源码.zip

    标题"ch07_android开发_源码.zip"表明这是一个关于Android开发的源码学习资料,可能包含了某个特定章节或主题的内容,例如第七章的学习资源。虽然没有具体的标签,但我们可以从文件名推测这可能是某个教程或书籍的...

    android ophone开发完全讲义源码ch07

    《Android OPhone开发完全讲义源码Ch07》是一份深入探讨Android OPhone平台开发的教程资料,其中包含了第七章的源代码。这一章节很可能着重讲解了Android系统在OPhone定制版本上的应用开发和系统集成。OPhone是基于...

    数据库ch07数据库ch07.ppt

    数据库ch07数据库ch07

    疯狂android讲义(第2版) 源码 ch07-09

    源码ch07-09涵盖了书中第七章到第九章的内容,这些章节通常会涉及Android应用开发中的核心概念和技术。 第七章通常会讲解Android的UI设计与实现,包括布局管理器如LinearLayout、RelativeLayout、GridLayout等,...

    ch07-2.rar

    布尔表达式、真值表、卡诺图等是分析和化简逻辑函数的常用方法。 3. **复合门电路**:如三态门(Tri-state gate)、OC门(Open Collector)和OD门(Open Drain),这些门电路在多路复用和数据总线控制中有重要应用...

    Android SDK开发范例大全(第二版)CH07_1.rar

    《Android SDK开发范例大全(第二版)CH07_1.rar》是一个包含多个示例项目的压缩包,这些示例项目主要围绕Android SDK的第七章内容展开,旨在帮助开发者深入理解并掌握Android应用开发的关键技术。这个压缩包中的每一...

    Android SDK开发范例大全(第二版)CH07_2.rar

    《Android SDK开发范例大全(第二版)CH07_2.rar》是一个包含多个示例项目的压缩包,主要聚焦于Android应用开发中的特定章节——可能是第七章的第二部分。从提供的压缩包子文件名称来看,我们可以推测这些项目是针对...

    ch07 整数规划.rar_ch07_整数规划

    标题"ch07 整数规划.rar_ch07_整数规划"表明这是一个关于整数规划的压缩包文件,可能包含第七章的学习材料或教程,如PDF文档、课件或习题解答,用于深入理解和掌握整数规划的概念和方法。 描述中的"整数规划是指...

    信息系统软件设计(c#.net版)CH07代码

    标题中的“信息系统软件设计(C#.NET版)CH07代码”揭示了这是一个关于C#.NET编程语言在构建信息系统中的具体应用,特别是集中在第7章的内容。C#.NET是由微软开发的一种面向对象的编程语言,它被广泛用于开发Web应用...

    ch07运行环境.pptx

    ch07运行环境.pptx

    Ch07 产品策略.pptx

    Ch07 产品策略.pptx

    ch07 词法分析.pptx

    ch07 词法分析.pptx

    通信电路ch07-1.ppt

    系统原理框图显示,输入信号经过处理后产生输出,而输出信号的一部分被反馈回输入端,通过比较器与参考信号进行比较。如果发现偏差,就会产生误差电压,这个误差电压用来控制可控设备调整输出,从而使输入和输出之间...

    Android APP开发入门:使用Android Studio环境 配套范例程序7-12章

    在Android应用开发的世界里,Android Studio是首选的集成开发环境(IDE),它为开发者提供了高效且功能丰富的工具,使得创建Android应用程序变得简单易行。本资料包“Android APP开发入门:使用Android Studio环境 ...

    精通Android4源码_source_code_of_ProAndroid4

    `ProAndroid4_Ch07_TestMenus.zip` 集中在菜单设计。Android应用的菜单可以出现在选项卡、Action Bar或者弹出式窗口中,这部分源码会演示如何创建和响应菜单事件,以及如何利用菜单实现多层次的交互。 `ProAndroid4...

    ch07_ibatisDemo.rar

    【标题】"ch07_ibatisDemo.rar" 涉及的是关于MyBatis框架的实战演示,这个压缩包...通过分析这个压缩包,学习者可以深入理解MyBatis的配置、使用方法,以及如何在实际项目中整合和测试MyBatis,提升数据库操作的效率。

    Google Android SDK开发范例大全 源码2.rar

    通过对这些源码的分析和学习,开发者可以掌握Android SDK的各种功能和API的使用方法,提升开发技能。 源码2.rar包含的文件主要分为四个部分,对应书中的四个章节: 1. **CH08**:这一章节可能涉及的是Android的...

    中文版 PHOTOSHOP CS5基础培训教程 随书光盘 ch07

    章节七(Ch07)通常会涵盖以下关键知识点: 1. **图层管理**:图层是Photoshop的核心概念,用于组织和编辑图像的不同部分。Ch07可能会介绍如何创建、隐藏、调整顺序、合并以及使用图层蒙版和调整图层。 2. **选择...

Global site tag (gtag.js) - Google Analytics