2017-07-19 94 views
0

在Android上,我使用TimePicker对话框设置了EditText。默认时间是现在,但使用TimePicker时间shuld更改。Android TimePicker问题

我有三个问题:

1)选择其他时间,有时displayng时间上的EditText不会改变; 2)如果我使用TimePicker并选择同一时间,它会改变+12h(例如现在是09.35,但它显示21.35);

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

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功能:

// 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(); 
} 

在这里,我editext定义:

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); } }); 

我哪里错了?

回答

0
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); 
    } 
}; 

其中 “日期”, “时间” 是按钮和 “set_date”, “set_time” 在这种情况下editTexts。

+0

根据您的建议我更改 'calendar.set(hourOfDay,minute);编辑文本.setText(新的SimpleDateFormat(“HH:mm”,Locale.ITALIAN).format(calendar.getTime())); ' 至 'calendar.set(hourOfDay,minute); editText.setText(String.valueOf(hourOfDay)+“:”+ String.valueOf(minute)); ' 这解决了问题1)和2)对我来说,但3)坚持。 所以我删除行'calendar.set(hourOfDay,minute);'它正常工作。 感谢您的建议。不管怎样,为什么'calendar.set(hourOfDay,minute);'创建java.lang.ArrayIndexOutOfBoundsException? – Fedro

+0

我也不知道它为什么抛出异常。无论如何,如果您认为我的解决方案是正确的,请接受我的回答。 –