Android 时间选择器未从用户输入更新

Android 时间选择器未从用户输入更新,android,datetimepicker,Android,Datetimepicker,我有一个使用自定义日期时间选择器的应用程序。当用户选择一个时间并单击“设置”按钮时,它将获得微调器上设置的时间。我的应用程序会检查时间,如果根据某些标准不合适,我会再次显示微调器 问题是,当用户第二次或后续时间更改微调器上的时间时,初始时间仍处于设置状态。如何从dateTime对象中反映的微调器获取时间 我尝试调用TPic.getCurrentHour等,并在TPic对象上调用refreshDrawableState,但它仍然不起作用。有什么想法吗 Button ShowDTPicker; Bu

我有一个使用自定义日期时间选择器的应用程序。当用户选择一个时间并单击“设置”按钮时,它将获得微调器上设置的时间。我的应用程序会检查时间,如果根据某些标准不合适,我会再次显示微调器

问题是,当用户第二次或后续时间更改微调器上的时间时,初始时间仍处于设置状态。如何从dateTime对象中反映的微调器获取时间

我尝试调用TPic.getCurrentHour等,并在TPic对象上调用refreshDrawableState,但它仍然不起作用。有什么想法吗

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在哪里?