2012-12-01 17 views
5

Na przykład, kiedy utworzę ten timePicker (poniżej) o 18:00, wartość time timeKicker będzie miała wartość 06:00. Na 19: 44-> 07:44 ... Tak więc nie przechodzi do właściwej bieżącej godziny po przełączeniu z AM/PM na tryb 24h. Jak mogę to zmienić? Moim celem jest, aby timePicker pokazywał aktualny czas, kiedy został utworzony. Podobnie jak wtedy, gdy używam go w trybie AM/PM.Godzina TimePicker nie aktualizuje się po przejściu na 24h

TimePicker timePicker = (TimePicker) convertView.findViewById(R.id.time_picker); 
timePicker.setIs24HourView(true); 

Sry za złe sformułowanie, mam nadzieję, że rozumiesz moje pytanie. W przeciwnym razie po prostu zapytaj.

UPDATE:

public class ChooseTimeViewDialog extends AlertDialog { 

    protected Context context; 


    public ChooseTimeViewDialog(final Context context) { 
     super(context);  
     this.context = context; 
    } 

    public void onCreate(Bundle savedInstanceState) { 
     LayoutInflater inflater = this.getLayoutInflater(); 

     View convertView = inflater.inflate(R.layout.dialog_choose_time_view, null); 
     setContentView(convertView); 
     setTitle(R.string.title_dialog_choose_time_view); 

     final TimePicker taskTimePicker = (TimePicker) convertView.findViewById(R.id.dctv_task_time_picker); 
     taskTimePicker.setIs24HourView(true); 


     setButton(DialogInterface.BUTTON_POSITIVE, "Choose", new DialogInterface.OnClickListener() { 
      @Override 
      public void onClick(DialogInterface dialog, int which) { 
       int hour = taskTimePicker.getCurrentHour(); 
       int minute = taskTimePicker.getCurrentMinute(); 

       Calendar cal = new GregorianCalendar(); 
       cal.set(0, 0, 0, hour, minute, 0); 

       ((AddTaskViewActivity) context).setSelectedTime(cal.getTime()); 
      } 
     }); 
     setButton(DialogInterface.BUTTON_NEUTRAL, "No time", new DialogInterface.OnClickListener() { 
      @Override 
      public void onClick(DialogInterface dialog, int which) { 
       ((AddTaskViewActivity) context).setSelectedTime(null); 
      } 
     }); 

    } 

} 

XML:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" > 

    <TimePicker 
     android:id="@+id/dctv_task_time_picker" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentTop="true" 
     android:layout_centerHorizontal="true" /> 

</RelativeLayout> 

Po przeniósł initialiation do onCreate i używane setContentView (Widok), tło w oknie dialogowym jest przezroczysty, to na pełnym ekranie i nie ma przyciski .. dlaczego?

+0

Cóż mogę to naprawić, ale to naprawdę nie jest fajne rozwiązanie, lepsze? timePicker.setCurrentHour (nowa data(). GetHours()); – StupidBird

+0

Kiedy jest wykonywany ten kod? Wiele widżetów nie przerysowuje magicznie po ich utworzeniu. – rds

+0

Jest wykonywany w konstruktorze niestandardowego AlertDialog o nazwie ChooseTimeDialog, który utworzyłem. Za każdym razem, gdy otwieram okno dialogowe, tworzę nowy obiekt: nowy ChooseTimeDialog (this) .show(); – StupidBird

Odpowiedz

7

mogę wykorzystać timePicker.setCurrentHour (new Date(). GetHours()), ale to nie jest rozwiązanie chcę. Powinno być możliwe rozwiązanie go w lepszy sposób.

Patrząc na source code, jest to błąd, który pojawił się jakiś czas po API 10:

public void setIs24HourView(Boolean is24HourView) { 
    if (mIs24HourView == is24HourView) { 
     return; 
    } 
    mIs24HourView = is24HourView; 
    // cache the current hour since spinner range changes 
    int currentHour = getCurrentHour(); 
    updateHourControl(); 
    // set value after spinner range is updated 
    setCurrentHour(currentHour); 
    updateAmPmControl(); 
} 

Poprawna kolejność jest:

// cache the current hour since spinner range changes 
int currentHour = getCurrentHour(); 
mIs24HourView = is24HourView; 

Ponieważ getCurrentHour() polega na mIs24HourView wrócić 1- 12 lub 0-23 ...

Ale dopóki kod źródłowy nie zostanie zaktualizowany i wdrożony yed, nie masz wielkiego wyboru. Musisz zadzwonić pod numer setCurrentHour() po setIs24HourView().

0

swój dialog należy zainicjować w onCreate

+1

Po zainicjowaniu go w onCreate, a także użyciu funkcji setContentView (view), okno dialogowe ma przezroczyste tło, wypełnia cały ekran i nie ma przycisków ....Opublikuję cały kod w moim pytaniu, może ktoś znajdzie błąd – StupidBird

+0

Przykro mi, ale może wiesz dlaczego to nie działa dobrze, kiedy używam onCreate zamiast konstruktora? To doprowadza mnie do szaleństwa! Wygląda na to, że wszystkie przyciski setButton(), setTitle() są ignorowane ... – StupidBird

0

Oprócz przyjętej odpowiedź, jeśli używasz Xamarin następnie można zrobić to samo przez instacji timepicker i przesłanianie SetIs24HourView tak:

public class TwentyFourHourMvxTimePicker : MvxTimePicker 
{ 
    public TwentyFourHourMvxTimePicker(Context context, IAttributeSet attrs) : base (context, attrs) 
    { 

    } 

    public override void SetIs24HourView (Java.Lang.Boolean is24HourView) 
    { 
     var current = CurrentHour; 
     base.SetIs24HourView(is24HourView); 
     CurrentHour = current; 
    } 
} 
Powiązane problemy