2014-01-31 1 views
-4

У меня возникла странная проблема. Когда я пытаюсь выбрать время, используя Time-picker, я получаю странный результат.Неправильное отображение времени отображения

Например, если я установил время на 11:04, выход 11:4 ???

Также, если я установил время на 12:30, выход 12:3 ???

//Time Picker Dialog 
protected Dialog onCreateDialog(int id) 
{ 
    switch(id) 
    { 
    case dialog_id: 
     return new TimePickerDialog(this, mTimeSetListener, hour, minute, false); 
    }  
    return null; 
} 

private TimePickerDialog.OnTimeSetListener mTimeSetListener = new TimePickerDialog.OnTimeSetListener() { 

    @Override 
    public void onTimeSet(TimePicker view, int hourOfDay, int hour_minute) 
    { 
     hour = hourOfDay; 
     minute = hour_minute; 

     if (hourOfDay > 12) 
     { 
      hour = hourOfDay - 12; 
      amORpm = "PM"; 
     } 
     else 
     { 
      hour = hourOfDay; 
      amORpm = "AM"; 
     } 

     textBox.setText(hour + " : " + minute + " " + amORpm); 

     Toast.makeText(getBaseContext(), "Arrival time changed to: " + hour +":" + minute , Toast.LENGTH_LONG).show(); 

    } 
}; 
+0

показать нам больше кода –

+0

Вы уверены 'Кроме того, если установить время до 12:30 из положить в 12: 3'? –

+0

yep удаляет «0» – user3182266

ответ

-2

Используйте этот класс

public class TimeListener implements OnClickListener, OnTimeSetListener { 

    private int hour; 
    private int minute; 
    private Activity activity; 
    private View touchedView; 

    public TimeListener(Activity activity) { 
     this.activity = activity; 
     final Calendar c = Calendar.getInstance(); 
     this.hour = c.get(Calendar.HOUR_OF_DAY); 
     this.minute = c.get(Calendar.MINUTE); 
    } 

    public int getHour() { 
     return hour; 
    } 

    public int getMinute() { 
     return minute; 
    } 


    @Override 
    public void onClick(View v) { 
     touchedView = v; 

     new TimePickerDialog(activity, 
       this, this.getHour(), this.getMinute(), false).show(); 
    } 

    private void updateDisplay() { 
     ((TextView) touchedView).setText(
      new StringBuilder() 
        .append(pad(hour)).append(":") 
        .append(pad(minute))); 
    } 

    private static String pad(int c) { 
     if (c >= 10) 
      return String.valueOf(c); 
     else 
      return "0" + String.valueOf(c); 
    } 

    public void onTimeSet(TimePicker view, int hourOfDay, int minute) { 
     this.hour = hourOfDay; 
     this.minute = minute; 
     updateDisplay(); 
    } 
} 

и использовать ниже код внутри вашего класса активность ...

private TimeListener timeListener = new TimeListener(this); 
view.setOnClicklistner(timeListener); 

Спасибо ...

+1

вы забыли AM/PM –

0

Попробуйте использовать

minute = String.valueOf(hour_minute); 

, поскольку Integer не включает начальный 0, и убедитесь, что минута строковая переменная

+0

То, что я думал, но он отправил 'Также, если я установил время до 12:30, выход будет 12: 3' –

-1

Использование ниже код он отлично работает для меня.

@Override 
    protected Dialog onCreateDialog(int id) { 
     switch (id) { 
     case TIME_DIALOG_ID: 
      // set time picker as current time 
      return new TimePickerDialog(this, timePickerListener, hour, 
        minute, false); 
     } 
     return null; 
    } 

    private TimePickerDialog.OnTimeSetListener timePickerListener = new TimePickerDialog.OnTimeSetListener() { 
     @Override 
     public void onTimeSet(TimePicker view, int hourOfDay, int minutes) { 
      hour = hourOfDay; 
      minute = minutes; 
      updateTime(hour, minute); 
     } 
    }; 

    private void updateTime(int hours, int mins) { 

     String timeSet = ""; 
     if (hours > 12) { 
      hours -= 12; 
      timeSet = "PM"; 
     } else if (hours == 0) { 
      hours += 12; 
      timeSet = "AM"; 
     } else if (hours == 12) 
      timeSet = "PM"; 
     else 
      timeSet = "AM"; 

     String minutes = ""; 
     if (mins < 10) 
      minutes = "0" + mins; 
     else 
      minutes = String.valueOf(mins); 

     String aTime = new StringBuilder().append(hours).append(':').append(minutes) 
       .append(" ").append(timeSet).toString(); 
      textBox.setText(aTime); 
    } 
+0

Просто измените имя переменной согласно вашему требованию. И все же, если у вас есть какие-либо запросы, сделайте комментарий. – InnocentKiller

+0

Я ниспровергаю вас, потому что ваш код для 'String timeSet =" ";' слишком сложный. Вероятно, это может быть упрощено, если вы начинаете с 'String timeSet =" AM ";' –

+0

Это другой выбор, по той простой причине, что вы не можете понизить рейтинг всех пользователей, поскольку ответ каждого пользователя несколько верен. – InnocentKiller

0

Вы должны использовать ниже формат для правильного отображения однозначного времени:

String.format("%02d:%02d", hour, min); 

где час и мин представляют значение часа и минут.

0

Поскольку возвращаемое значение является целым числом, исключающий передний ноль исключается. Если вам нужно использовать целое число, например, установить будильник, тогда вы можете использовать его как таковое. Чтобы отобразить пользователю, вы можете получить время из календаря в виде строки и сохранить его в строке, которая будет иметь нулевой номер, например, 02:05. Получение, как это будет возвращать значение с нуля, но как строка:

String.format("%02d", minute); 

 Смежные вопросы

  • Нет связанных вопросов^_^