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

packagecom.ch07.callback;

/**

*

*项目名称:com.ch07.callback

*类名称:CallUp

*类描述:打电话类

*创建人:fy

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

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

*/

publicclassCallUp{

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

publicvoidcallme(OnCallBackonCallBack){

onCallBack.execute();

}

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

publicinterfaceOnCallBack{

voidexecute();

}

}

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

packagecom.ch07.callback;

/**

*

*场景描述:

*

*java回调函数

*什么是回调?(What)

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

*具体解释:

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

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

*共同的部分:

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

*不同的部分

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

*回调都做了什么?

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

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

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

*

*/

publicclassTestCall{

publicstaticvoidmain(String[]args){

/*实例化电话类*/

CallUpcallUp=newCallUp();

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

callUp.callme(newCallUp.OnCallBack(){

@Override

publicvoidexecute(){

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

}

});

}

}

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

/*

*Copyright(C)2007TheAndroidOpenSourceProject

*

*LicensedundertheApacheLicense,Version2.0(the"License");

*youmaynotusethisfileexceptincompliancewiththeLicense.

*YoumayobtainacopyoftheLicenseat

*

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

*

*Unlessrequiredbyapplicablelaworagreedtoinwriting,software

*distributedundertheLicenseisdistributedonan"ASIS"BASIS,

*WITHOUTWARRANTIESORCONDITIONSOFANYKIND,eitherexpressorimplied.

*SeetheLicenseforthespecificlanguagegoverningpermissionsand

*limitationsundertheLicense.

*/

packageandroid.app;

importandroid.content.Context;

importandroid.content.DialogInterface;

importandroid.content.DialogInterface.OnClickListener;

importandroid.os.Bundle;

importandroid.text.format.DateUtils;

importandroid.view.LayoutInflater;

importandroid.view.View;

importandroid.widget.DatePicker;

importandroid.widget.DatePicker.OnDateChangedListener;

importcom.android.internal.R;

importjava.util.Calendar;

/**

*Asimpledialogcontainingan{@linkandroid.widget.DatePicker}.

*

*<p>Seethe<ahref="{@docRoot}resources/tutorials/views/hello-datepicker.html">DatePicker

*tutorial</a>.</p>

*/

publicclassDatePickerDialogextendsAlertDialogimplementsOnClickListener,

OnDateChangedListener{

privatestaticfinalStringYEAR="year";

privatestaticfinalStringMONTH="month";

privatestaticfinalStringDAY="day";

privatefinalDatePickermDatePicker;

privatefinalOnDateSetListenermCallBack;

privatefinalCalendarmCalendar;

privatebooleanmTitleNeedsUpdate=true;

/**

*Thecallbackusedtoindicatetheuserisdonefillinginthedate.

*/

publicinterfaceOnDateSetListener{

/**

*@paramviewTheviewassociatedwiththislistener.

*@paramyearTheyearthatwasset.

*@parammonthOfYearThemonththatwasset(0-11)forcompatibility

*with{@linkjava.util.Calendar}.

*@paramdayOfMonthThedayofthemonththatwasset.

*/

voidonDateSet(DatePickerview,intyear,intmonthOfYear,intdayOfMonth);

}

/**

*@paramcontextThecontextthedialogistorunin.

*@paramcallBackHowtheparentisnotifiedthatthedateisset.

*@paramyearTheinitialyearofthedialog.

*@parammonthOfYearTheinitialmonthofthedialog.

*@paramdayOfMonthTheinitialdayofthedialog.

*/

publicDatePickerDialog(Contextcontext,

OnDateSetListenercallBack,

intyear,

intmonthOfYear,

intdayOfMonth){

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

}

/**

*@paramcontextThecontextthedialogistorunin.

*@paramthemethethemetoapplytothisdialog

*@paramcallBackHowtheparentisnotifiedthatthedateisset.

*@paramyearTheinitialyearofthedialog.

*@parammonthOfYearTheinitialmonthofthedialog.

*@paramdayOfMonthTheinitialdayofthedialog.

*/

publicDatePickerDialog(Contextcontext,

inttheme,

OnDateSetListenercallBack,

intyear,

intmonthOfYear,

intdayOfMonth){

super(context,theme);

mCallBack=callBack;

mCalendar=Calendar.getInstance();

ContextthemeContext=getContext();

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

setIcon(0);

LayoutInflaterinflater=

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

Viewview=inflater.inflate(R.layout.date_picker_dialog,null);

setView(view);

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

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

updateTitle(year,monthOfYear,dayOfMonth);

}

publicvoidonClick(DialogInterfacedialog,intwhich){

tryNotifyDateSet();

}

publicvoidonDateChanged(DatePickerview,intyear,

intmonth,intday){

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

updateTitle(year,month,day);

}

/**

*Getsthe{@linkDatePicker}containedinthisdialog.

*

*@returnThecalendarview.

*/

publicDatePickergetDatePicker(){

returnmDatePicker;

}

/**

*Setsthecurrentdate.

*

*@paramyearThedateyear.

*@parammonthOfYearThedatemonth.

*@paramdayOfMonthThedatedayofmonth.

*/

publicvoidupdateDate(intyear,intmonthOfYear,intdayOfMonth){

mDatePicker.updateDate(year,monthOfYear,dayOfMonth);

}

privatevoidtryNotifyDateSet(){

if(mCallBack!=null){

mDatePicker.clearFocus();

mCallBack.onDateSet(mDatePicker,mDatePicker.getYear(),

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

}

}

@Override

protectedvoidonStop(){

tryNotifyDateSet();

super.onStop();

}

privatevoidupdateTitle(intyear,intmonth,intday){

if(!mDatePicker.getCalendarViewShown()){

mCalendar.set(Calendar.YEAR,year);

mCalendar.set(Calendar.MONTH,month);

mCalendar.set(Calendar.DAY_OF_MONTH,day);

Stringtitle=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

publicBundleonSaveInstanceState(){

Bundlestate=super.onSaveInstanceState();

state.putInt(YEAR,mDatePicker.getYear());

state.putInt(MONTH,mDatePicker.getMonth());

state.putInt(DAY,mDatePicker.getDayOfMonth());

returnstate;

}

@Override

publicvoidonRestoreInstanceState(BundlesavedInstanceState){

super.onRestoreInstanceState(savedInstanceState);

intyear=savedInstanceState.getInt(YEAR);

intmonth=savedInstanceState.getInt(MONTH);

intday=savedInstanceState.getInt(DAY);

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

}

}

<!--EndFragment-->

更多相关文章

  1. Android拨打电话 安卓拨打电话权限
  2. Android(安卓)HFP Profile 连接过程
  3. Activity生命周期讲解
  4. android集成 任务调度 cron4j
  5. Cocos2d-x从C++端调用Android端的非静态函数接口
  6. 不仅是微软和诺基亚,谁都无法 fork Android,因为它就没法 fork
  7. Cocos2d-x从C++端调用Android端的非静态函数接口
  8. 自定义 Android(安卓)对话框 (AlertDialog) 的样式 (Android中自
  9. Android屏幕适配全攻略(最权威的官方适配指导)Android屏幕适配出现

随机推荐

  1. Android之GPU过度绘制与图形渲染优化——
  2. Android事件总线框架设计:EventBus3.0源码
  3. Android(安卓)官方 Training 文档学习总
  4. 你觉得Android又凉了?那带你看下2020年And
  5. VINS在Android上的实现
  6. Android实现自定义测滑栏
  7. 用Ant手动打包android程序,android分包机
  8. 一篇文章带你领略Android混淆的魅力
  9. Android(安卓)UI 模式(patterns)
  10. 从Titlebar到Actionbar再到Toolbar