Android 时间选择器未从用户输入更新
我有一个使用自定义日期时间选择器的应用程序。当用户选择一个时间并单击“设置”按钮时,它将获得微调器上设置的时间。我的应用程序会检查时间,如果根据某些标准不合适,我会再次显示微调器 问题是,当用户第二次或后续时间更改微调器上的时间时,初始时间仍处于设置状态。如何从dateTime对象中反映的微调器获取时间 我尝试调用TPic.getCurrentHour等,并在TPic对象上调用refreshDrawableState,但它仍然不起作用。有什么想法吗Android 时间选择器未从用户输入更新,android,datetimepicker,Android,Datetimepicker,我有一个使用自定义日期时间选择器的应用程序。当用户选择一个时间并单击“设置”按钮时,它将获得微调器上设置的时间。我的应用程序会检查时间,如果根据某些标准不合适,我会再次显示微调器 问题是,当用户第二次或后续时间更改微调器上的时间时,初始时间仍处于设置状态。如何从dateTime对象中反映的微调器获取时间 我尝试调用TPic.getCurrentHour等,并在TPic对象上调用refreshDrawableState,但它仍然不起作用。有什么想法吗 Button ShowDTPicker; Bu
Button ShowDTPicker;
Button ShowDatePicker;
Button ShowTimePicker;
Button Set;
Button ReSet;
Button Cancel;
DatePicker DPic;
TimePicker TPic;
TextView Date;
private ViewSwitcher switcher;
static final int DATE_TIME_DIALOG_ID = 999;
Dialog dialog;
public void showDateTimeDialog(){
//final Calendar c = Calendar.getInstance();
final SimpleDateFormat dfDate = new SimpleDateFormat("dd-MMM-yyyy HH:mm");
dialog = new Dialog(NfcscannerActivity.this);
dialog.setContentView(R.layout.datetimepicker);
switcher = (ViewSwitcher) dialog.findViewById(R.id.DateTimePickerVS);
TPic = (TimePicker) dialog.findViewById(R.id.TimePicker);
DPic = (DatePicker) dialog.findViewById(R.id.DatePicker);
TPic.setIs24HourView(true);
ShowDatePicker = ((Button) dialog.findViewById(R.id.SwitchToDate));
ShowDatePicker.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
switcher.showPrevious();
ShowDatePicker.setEnabled(false);
ShowTimePicker.setEnabled(true);
}
});
ShowTimePicker = ((Button) dialog.findViewById(R.id.SwitchToTime));
ShowTimePicker.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
switcher.showNext();
ShowDatePicker.setEnabled(true);
ShowTimePicker.setEnabled(false);
}
});
Set = ((Button) dialog.findViewById(R.id.SetDateTime));
Set.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Calendar c = Calendar.getInstance();
c.set(DPic.getYear(), DPic.getMonth(), DPic.getDayOfMonth(), TPic.getCurrentHour(), TPic.getCurrentMinute());
Log.e(TAG, "TPic hour and minute = " + TPic.getCurrentHour() + " " + TPic.getCurrentMinute());
timeSetOnSpinner = new DateTime(c);
................
................
...............
//check if time is suitable, if not call showDateTimeDialog() again
}
});
ReSet = ((Button) dialog.findViewById(R.id.ResetDateTime));
ReSet.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Calendar c = Calendar.getInstance();
DPic.updateDate(c.get(Calendar.YEAR), c.get(Calendar.MONTH), c.get(Calendar.DAY_OF_MONTH));
TPic.setCurrentHour(c.get(Calendar.HOUR_OF_DAY));
TPic.setCurrentMinute(c.get(Calendar.MINUTE));
}
});
Cancel = ((Button) dialog.findViewById(R.id.CancelDialog));
Cancel.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
dialog.cancel();
}
});
dialog.setTitle("Please enter time of last logout");
try{
ReSet.performClick();
dialog.show();
}catch(Exception e){
//ignore
}
Log.e(TAG,"Just executed dialog.show() and at the end of showDateTimeDialog method");
}//showDateTimeDialog()
@Override
protected Dialog onCreateDialog(int id) {
switch (id) {
case DATE_TIME_DIALOG_ID:
return dialog;
}
return null;
}
我也遇到了同样的问题(不过是asp.net的问题)。。。我知道这是因为在回发过程中没有考虑新选择的时间,所以更新甚至没有发生。。。我还知道,我与日期选择器有相同的问题,并解决了它保存在hiddenfields中的值,我正在代码中检索它。
所以,这里基本上是一样的,我们需要javascript函数在hiddenfield中存储th值,以便稍后检索
此功能可通过提交按钮上的OnClientClick操作触发。
但是我在寻找如何从javascript中的时间选择器获取值时遇到了问题,我没有找到准确的文档。
我希望这有帮助,如果您找到任何解决方案,请继续关注我们 我也有同样的问题(不过是asp.net的问题)。。。我知道这是因为在回发过程中没有考虑新选择的时间,所以更新甚至没有发生。。。我还知道,我与日期选择器有相同的问题,并解决了它保存在hiddenfields中的值,我正在代码中检索它。
所以,这里基本上是一样的,我们需要javascript函数在hiddenfield中存储th值,以便稍后检索
此功能可通过提交按钮上的OnClientClick操作触发。
但是我在寻找如何从javascript中的时间选择器获取值时遇到了问题,我没有找到准确的文档。
我希望这有帮助,如果您找到任何解决方案,请继续关注我们
似乎DatePicker或TimePicker在其焦点消失时更新自己的值。使用设置按钮的OnClickListener
中的方法
我认为代码应该是这样的:
Set = ((Button) dialog.findViewById(R.id.SetDateTime));
Set.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
DPic.clearFocus();
TPic.clearFocus();
Calendar c = Calendar.getInstance();
c.set(DPic.getYear(), DPic.getMonth(), DPic.getDayOfMonth(),
TPic.getCurrentHour(), TPic.getCurrentMinute());
Log.e(TAG, "TPic hour and minute = " + TPic.getCurrentHour()
+ " " + TPic.getCurrentMinute());
timeSetOnSpinner = new DateTime(c);
}
});
请注意,showdtcipker
,showdetpicker
,showdetimecker
,设置
,重置
,取消
,DPic
,TPic
,日期
不在后面。首字母大写的名称是for(类也存在!)。如果它们是公共类变量,则它们的每个第一个字母都应该是小写的。也可以使用mSwitcher
而不是switcher
,因为它是私有类变量。
似乎DatePicker或TimePicker在其焦点消失时更新自己的值。使用设置按钮的OnClickListener
中的方法
我认为代码应该是这样的:
Set = ((Button) dialog.findViewById(R.id.SetDateTime));
Set.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
DPic.clearFocus();
TPic.clearFocus();
Calendar c = Calendar.getInstance();
c.set(DPic.getYear(), DPic.getMonth(), DPic.getDayOfMonth(),
TPic.getCurrentHour(), TPic.getCurrentMinute());
Log.e(TAG, "TPic hour and minute = " + TPic.getCurrentHour()
+ " " + TPic.getCurrentMinute());
timeSetOnSpinner = new DateTime(c);
}
});
请注意,
showdtcipker
,showdetpicker
,showdetimecker
,设置
,重置
,取消
,DPic
,TPic
,日期
不在后面。首字母大写的名称是for(类也存在!)。如果它们是公共类变量,则它们的每个第一个字母都应该是小写的。也可以使用mSwitcher
而不是switcher
,因为它是私有类变量。对于kotlin您可以测试此代码
var timePicker : TimePicker = findViewById(R.id.timePicker)
timePicker.setOnTimeChangedListener(object:TimePicker.OnTimeChangedListener {
override fun onTimeChanged(p0: TimePicker?, hour: Int,minute: Int) {
// get hour and minute
hour_set =hour
minute_set =minute
} })
对于kotlin,您可以测试此代码
var timePicker : TimePicker = findViewById(R.id.timePicker)
timePicker.setOnTimeChangedListener(object:TimePicker.OnTimeChangedListener {
override fun onTimeChanged(p0: TimePicker?, hour: Int,minute: Int) {
// get hour and minute
hour_set =hour
minute_set =minute
} })
你的onTimeChangedListener在哪里?你的onTimeChangedListener在哪里?