ch07 Android 回调方法
--------------------------------------------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-->
更多相关文章
- 不仅是微软和诺基亚,谁都无法 fork Android,因为它就没法 fork
- Android:微软的金钱机器(更新)
- Android SDK 1.0 电话号码的例子(Demo)
- 怎么去掉联系人、通话记录、拨号列表界面中的电话号码中间的空格
- Android之实现手机号码拦截
- [Android] Android下实现电话号码归属地的查询
- android 取手机号码
- 五成Android设备要向微软支付专利费