2

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

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

我试过在 TPic 对象上调用 TPic.getCurrentHour 等以及 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;
        }

.

<?xml version="1.0" encoding="UTF-8"?>
<RelativeLayout 

    android:padding="5dip" 
    android:fitsSystemWindows="true" 
    android:layout_height="wrap_content" 
    android:layout_width="fill_parent" 
    android:id="@+id/DateTimePicker" 
    xmlns:android="http://schemas.android.com/apk/res/android">

    <LinearLayout 

        android:layout_height="wrap_content" 
        android:layout_width="fill_parent" 
        android:id="@+id/ViewSwitchButtons" 
        android:layout_marginBottom="5dip"> 

        <Button 
            android:layout_height="wrap_content" 
            android:layout_width="0dip" 
            android:id="@+id/SwitchToDate" 
            android:text="Set date" 
            android:enabled="false" 
            android:layout_weight="1"/>

        <Button 
            android:layout_height="wrap_content" 
            android:layout_width="0dip" 
            android:id="@+id/SwitchToTime" 
            android:text="Set time" 
            android:layout_weight="1"/>

        </LinearLayout> 

        <ViewSwitcher 
            android:layout_height="wrap_content" 
            android:layout_width="fill_parent" 
            android:id="@+id/DateTimePickerVS" 
            android:layout_below="@+id/ViewSwitchButtons" 
            android:outAnimation="@android:anim/fade_out" 
            android:inAnimation="@android:anim/fade_in"> 



                <LinearLayout 
                    android:layout_height="fill_parent" 
                    android:layout_width="fill_parent" 
                    android:id="@+id/TimeLayout" 
                    android:fillViewport="true"> 

                    <TimePicker 
                        android:layout_height="wrap_content" 
                        android:layout_width="fill_parent" 
                        android:id="@+id/TimePicker" 
                        android:layout_marginRight="5dip" 
                        android:layout_marginLeft="5dip"/>

                    </LinearLayout> 

                <LinearLayout android:layout_height="fill_parent" 
                android:layout_width="fill_parent" 
                android:id="@+id/DateLayout" 
                android:fillViewport="true"> 

                <DatePicker 
                    android:layout_height="wrap_content" 
                    android:layout_width="fill_parent" 
                    android:id="@+id/DatePicker" 
                    android:layout_marginRight="5dip" 
                    android:layout_marginLeft="5dip"/>

                </LinearLayout> 

                    </ViewSwitcher> 

                    <LinearLayout 
                        android:layout_height="wrap_content" 
                        android:layout_width="fill_parent" 
                        android:id="@+id/ControlButtons" 
                        android:layout_below="@+id/DateTimePicker" 
                        android:paddingTop="185dip"> 

                        <Button 
                            android:layout_height="wrap_content" 
                            android:layout_width="0dip" 
                            android:id="@+id/SetDateTime" 
                            android:text="@android:string/ok" 
                            android:layout_weight="1"/> 

                            <Button 
                                android:layout_height="wrap_content" 
                                android:layout_width="0dip" 
                                android:id="@+id/ResetDateTime" 
                                android:text="Reset" 
                                android:layout_weight="1"/>

                            <Button 
                                android:layout_height="wrap_content" 
                                android:layout_width="0dip" 
                                android:id="@+id/CancelDialog" 
                                android:text="@android:string/cancel" 
                                android:layout_weight="1"/> 

                                </LinearLayout> 

                                </RelativeLayout>
4

3 回答 3

3

Android:输入时如何从 TimePicker 获取时间

似乎 DatePicker 或 TimePicker 在焦点消失时会更新自己的值。在设置按钮中使用clearFocus()方法。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);
    }
});

请注意 , ShowDTPicker, ShowDatePicker, ShowTimePicker, Set, ReSet, Cancel,DPic不遵循Java 命名约定。首字母大写的名称用于类或接口(也存在Date类!)。如果它们是公共类变量,则它们的每个首字母都应为小写。也使用代替,因为它是私有类变量。TPicDatemSwitcherswitcher

于 2013-12-16T21:53:24.763 回答
1

对于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

         } })
于 2019-08-27T10:30:06.997 回答
0

我遇到了同样的问题(尽管使用asp.net)...我知道这是因为在回发期间没有考虑新选择的时间,所以更新甚至没有发生...我也知道我在日期选择器上遇到了同样的问题并解决了它,将值保存在隐藏字段中,我正在后面的代码中检索。所以,这里基本上是一样的,我们需要javascript函数来存储隐藏字段中的值以便稍后检索这个函数可以通过提交按钮上的OnClientClick动作触发。但是我在寻找如何从 javascript 中的 timePicker 中获取值时遇到问题,我没有找到准确的文档。我希望这会有所帮助,如果您找到任何解决方案,请继续关注我们。

于 2013-08-14T14:11:28.037 回答