网上已经很多帖子如何用,以及如何显示 确定和取消按钮
很多教程上届的图 都是有 set 和 cancel 按钮的,但是不同的机子上默认的主题不一样,我的自己就没有显示cancel的按钮。其实可以自己把按钮显示出来。
android的对话框,最多可以有三个按钮,平时中间的按钮是隐藏的,可以自己setbutton,另外也可以监控按钮事件来确定是否修改时间。网上都说dateset timeset 这两个接口来监听师是否点击 set按钮,其实是错的,就算点击了cancel按钮,也一样会触发这个接口。所以,监听这个接口不够准确。但是可以监听 按钮的点击事件,这样就准确了。
日期监听:
mDatePickerDialog.setButton(DialogInterface.BUTTON_POSITIVE,
ShopApplication.mInstance.getString(R.string.date_set_ok),
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
mDateFormat.mYear = mDatePickerDialog.getDatePicker()
.getYear();
mDateFormat.mMonth = mDatePickerDialog.getDatePicker()
.getMonth();
mDateFormat.mDay = mDatePickerDialog.getDatePicker()
.getDayOfMonth();
updateDateDisplay();
}
});
mDatePickerDialog.setButton(DialogInterface.BUTTON_NEGATIVE,
ShopApplication.mInstance.getString(R.string.date_set_cancel),
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// do nothing
while(mTimePickerDialog.isShowing()){// 这里不能柱塞,这个接口必须执行完了,才会消失窗口。不能放这里。
// ;
// Toast.makeText(mContext, " dialog is showing get current time :"+ mTimeFormat.mHour+mTimeFormat.mMinute, 0).show();
// }
}
});
但是时间选择的对话框,有点不一样:mTimePickerDialog.setButton(DialogInterface.BUTTON_NEGATIVE,
ShopApplication.mInstance.getString(R.string.date_set_cancel),
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// do nothing
}
});
没有类似 mDatePickerDialog . getDatePicker () . getYear (); 的接口来获取对应的小时和分钟。而且,点击事件先于onTimeSet接口的执行。那怎么获取时间 又能结合按键事件监听呢?尝试方法一:在按键监听中等 dialog消失,在取时间值;同时在ontimeset接口获取时间(可以用一个成员变量来保存)。但实际上,会堵塞,直接卡死。此方法不可行。
尝试方法二:同方法一类似,但是在按键监听中 通知handler来处理,在handler中等待。这样就不会堵塞对话框,又能够处理UI更新。