OnDataChangedListener和OnTimeChangedListener
- 当用户更改了DataPicker里面的年、月、日时,将触发OnDataChangedListener监听器的onDataChange()事件
- 当用户更改了TimePicker里面的时、分时,将触发OnTimeChangedListener监听器的onTimeChange()事件
OnDataSetChangedListener和OnTimeSetChangedListener
- 当用户更改了DataPickerDialog里面的年、月、日时,将触发OnDataSetListener监听器的onDataSet()事件
- 当用户更改了TimePickerDialog里面的时、分时,将触发OnTimeSetListener监听器的onTimeSet()事件
实例代码:
package com.example.datetimepicker;
import java.util.Calendar;
import android.support.v7.app.ActionBarActivity;
import android.text.format.Time;
import android.os.Bundle;
import android.provider.ContactsContract.RawContacts.Data;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.DatePicker;
import android.widget.DatePicker.OnDateChangedListener;
import android.widget.TimePicker;
import android.widget.TimePicker.OnTimeChangedListener;
public class MainActivity extends ActionBarActivity {
private DatePicker datePicker;
private TimePicker timePicker;
private Calendar cal;//Java中的日历类
private int month;
private int year;
private int day;
private int hour;
private int minute;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//获取日历的一个对象
cal=Calendar.getInstance();
//获取年月日分秒的信息
year=cal.get(Calendar.YEAR);
month=cal.get(Calendar.MONTH)+1;//所有Java中Calendar类中月份从0开始
day=cal.get(Calendar.DAY_OF_MONTH);
hour=cal.get(Calendar.HOUR_OF_DAY);
minute=cal.get(Calendar.MINUTE);
//设置标题栏
setTitle(year+"-"+month+"-"+day+"-"+hour+":"+minute);
datePicker=(DatePicker) findViewById(R.id.datePicker);
timePicker=(TimePicker) findViewById(R.id.timePicker);
//对dataPicker和timePicker进行初始化
datePicker.init(year, month, day, new OnDateChangedListener(){
@Override
public void onDateChanged(DatePicker view, int year,
int monthOfYear, int dayOfMonth) {
// TODO Auto-generated method stub
setTitle(year+"-"+monthOfYear+"-"+dayOfMonth+"-"+hour+":"+minute);
}
});//第四个参数为日期是否变化的监听器
timePicker.setOnTimeChangedListener(new OnTimeChangedListener() {
@Override
public void onTimeChanged(TimePicker view, int hourOfDay, int minute) {
// TODO Auto-generated method stub
setTitle(hourOfDay+":"+minute);
}
});
//使用DatePickerDialog实现日期选择对话框
new DatePickerDialog(this, new OnDateSetListener() {
@Override
public void onDateSet(DatePicker view, int year, int monthOfYear,
int dayOfMonth) {
// TODO Auto-generated method stub
setTitle(year+"-"+monthOfYear+"-"+dayOfMonth+"-"+hour+":"+minute);
}
}, year, cal.get(Calendar.MONTH), day).show();
//使用TimePickerDialog实现时间选择对话框
new TimePickerDialog(this, new OnTimeSetListener() {
@Override
public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
// TODO Auto-generated method stub
setTitle(hourOfDay+":"+minute);
}
}, hour, minute, true).show();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
}
4.总结
DataPicker对象以init()方法来指定DatePicker初始化年、月、日以及OnDateChangedListener()的事件;
而TimePicker对象则是直接以setOnTimeChangedListener()事件来处理时间改变时程序要做的操作。DataPickerDialog与TimePickerDialog与前面这两种类型的对象最大的差别在于DatePicker与TimePicker是直接显示在屏幕画面上,而DatePickerDialog与TimePickerDialog对象则是以弹出Dialog的方式来显示。