`
阅读更多

--------------------------------------------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
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics