首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android TimePicker问题

Android TimePicker问题
EN

Stack Overflow用户
提问于 2017-07-19 09:51:00
回答 2查看 1K关注 0票数 0

在Android上,我设置了一个带有EditText对话框的TimePicker。现在是默认时间,但是使用TimePicker时会发生更改。

我有三个问题:

1)选择另一次,有时在EditText上显示时间不变;

2)如果在TimePicker上提示并同时选择,则改变为+12h (例如现在为09.35,但显示为21.35 );

3)如果我选择一个小时>= 17.00,我有一个例外:

代码语言:javascript
复制
07-19 11:47:17.574 16224-16224/com.example.myapp E/AndroidRuntime: FATAL EXCEPTION: main
                                                                        Process: com.example.myapp, PID: 16224
                                                                        java.lang.ArrayIndexOutOfBoundsException: length=17; index=18
                                                                            at java.util.Calendar.set(Calendar.java:1122)
                                                                            at com.example.myapp.activities.MyActivity$9.onTimeSet(MyActivity.java:513)
                                                                            at android.app.TimePickerDialog.onClick(TimePickerDialog.java:133)
                                                                            at com.android.internal.app.AlertController$ButtonHandler.handleMessage(AlertController.java:160)
                                                                            at android.os.Handler.dispatchMessage(Handler.java:102)
                                                                            at android.os.Looper.loop(Looper.java:135)
                                                                            at android.app.ActivityThread.main(ActivityThread.java:5376)
                                                                            at java.lang.reflect.Method.invoke(Native Method)
                                                                            at java.lang.reflect.Method.invoke(Method.java:372)
                                                                            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:908)
                                                                            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:703)

这是我的TimePicker函数:

代码语言:javascript
复制
// TimePicker settings
public void setTimeFields(final EditText editText) {
    // Calendar instance
    final Calendar calendar = Calendar.getInstance();
    // TimePicker definition
    TimePickerDialog timePickerDialog = new TimePickerDialog(this, new TimePickerDialog.OnTimeSetListener() {
        public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
            calendar.set(hourOfDay, minute);
            editText.setText(new SimpleDateFormat("HH:mm", Locale.ITALIAN).format(calendar.getTime()));
        }
    }, calendar.get(Calendar.HOUR), calendar.get(Calendar.MINUTE), DateFormat.is24HourFormat(this));
    // Show dialog
    timePickerDialog.show();
}

在这里我的社论定义:

代码语言:javascript
复制
etxTime = (EditText) findViewById(R.id.etxTime);
etxTime.setInputType(InputType.TYPE_NULL);
etxTime.setText(new SimpleDateFormat("HH:mm", Locale.ITALIAN).format(Calendar.getInstance().getTime()));
etxTime.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { setTimeFields(etxTime); } });

我哪里错了?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-07-19 10:00:49

代码语言:javascript
复制
date.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View arg0) {

            // Show Date dialog
            showDialog(Date_id);
        }
    });
    time.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View arg0) {

            // Show time dialog
            showDialog(Time_id);
        }
    });
}

protected Dialog onCreateDialog(int id) {

    // Get the calander
    Calendar c = Calendar.getInstance();

    // From calander get the year, month, day, hour, minute
    int year = c.get(Calendar.YEAR);
    int month = c.get(Calendar.MONTH);
    int day = c.get(Calendar.DAY_OF_MONTH);
    int hour = c.get(Calendar.HOUR_OF_DAY);
    int minute = c.get(Calendar.MINUTE);

    switch (id) {
        case Date_id:

            // Open the datepicker dialog
            return new DatePickerDialog(MainActivity.this, date_listener, year,
                    month, day);
        case Time_id:

            // Open the timepicker dialog
            return new TimePickerDialog(MainActivity.this, time_listener, hour,
                    minute, false);

    }
    return null;
}

// Date picker dialog
DatePickerDialog.OnDateSetListener date_listener = new DatePickerDialog.OnDateSetListener() {

    @Override
    public void onDateSet(DatePicker view, int year, int month, int day) {
        // store the data in one string and set it to text
        String date1 = String.valueOf(month) + "/" + String.valueOf(day)
                + "/" + String.valueOf(year);
        set_date.setText(date1);
    }
};
TimePickerDialog.OnTimeSetListener time_listener = new TimePickerDialog.OnTimeSetListener() {

    @Override
    public void onTimeSet(TimePicker view, int hour, int minute) {
        // store the data in one string and set it to text
        String time1 = String.valueOf(hour) + ":" + String.valueOf(minute);
        set_time.setText(time1);
    }
};

在本例中,"date“、"time”是按钮,"set_date“、"set_time”是editTexts。

票数 0
EN

Stack Overflow用户

发布于 2020-04-17 02:31:30

出现第三个问题是因为参数Calendar.set(int,int)不是小时和分钟,而是要设置的字段和值。如果检查链接中的表,您将看到该字段的最大int值为17。因此,您的代码应该如下所示:

代码语言:javascript
复制
public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
    calendar.set(Calendar.HOUR_OF_DAY, hourOfDay);
    calendar.set(Calendar.MINUTE, minute);
    editText.setText(new SimpleDateFormat("HH:mm", Locale.ITALIAN).format(calendar.getTime()));
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45186961

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档