当前位置: 代码迷 >> Android >> ch07 Android 回调步骤
  详细解决方案

ch07 Android 回调步骤

热度:51   发布时间:2016-05-01 12:56:53.0
ch07 Android 回调方法

--------------------------------------------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?[email protected]}.

?*

?*?<p>See?the?<a?href="[email protected]}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?[email protected]}.

?????????*?@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_dialog,?null);

????????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?[email protected]}?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(mDatePicker,?mDatePicker.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(YEAR,?mDatePicker.getYear());

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

????????state.putInt(DAY,?mDatePicker.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-->

  相关解决方案