網上已經很多帖子如何用,以及如何顯示 確定和取消按鈕
很多教程上屆的圖 都是有 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更新。