2012-12-01 15 views
5

たとえば、このtimePicker(以下)を18:00に作成すると、timePickerのtimeValueは06:00になります。 19:44→07:44 ... AM/PMから24時間モードに切り替わった後の正しい現在の時間には移動しません。どうすれば変更できますか? 私の目標は、timePickerが作成された現在の時刻を表示することです。 AM/PMモードで使用するときと同じように。24時間に切り替えた後にTimePicker時間が更新されない

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

あなたが私の質問を理解できることを願っています。それ以外の場合は尋ねる。

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> 

私はのonCreateにinitialiationを移動し、setContentView(ビュー)を使用した後、ダイアログの背景が透明であり、それはフルスクリーンませんし、何を持っていますなぜ?

+0

まあ、私はそれを修正することができ、それは本当にありませんすてきな解決策、それ以上に良い? timePicker.setCurrentHour(新しいDate()。getHours()); – StupidBird

+0

このコードはいつ実行されますか?多くのウィジェットは、作成後に魔法のように再描画されません。 – rds

+0

私が作成したChooseTimeDialogというカスタムAlertDialogのコンストラクタで実行されます。私がダイアログを開くたびに、新しいオブジェクトを作成します:new ChooseTimeDialog(this).show(); – StupidBird

答えて

7

であなたのダイアログを初期化する必要があり、私がtimePicker.setCurrentHour使用することができます(新しい日付を()。次に、getHours())、それは私が欲しいの解決策ではありません。それをより良い方法で解決することが可能でなければなりません。 source codeを見ると

、これは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(); 
} 

正しい順序は次のとおりです。

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

getCurrentHour() 1-を返すために、mIs24HourViewに依存しているため12または0-23 ...

しかし、ソースコードが更新され、あなたはあまり選択肢がありません。 setIs24HourView()の後にsetCurrentHour()に電話する必要があります。受け入れ答えに加えて

0

あなたはonCreate

+1

onCreateで初期化し、setContentView(view)を使用すると、ダイアログは透明な背景を持ち、画面全体を塗りつぶし、ボタンがありません....私は私の質問で、全体のコードを投稿します、多分誰かが間違いを見つける – StupidBird

+0

私は申し訳ありませんが、なぜそれが正常に動作していない場合は、コンストラクタの代わりにonCreateを使用して知っている?その私を狂って運転!すべてのsetButton()、setTitle()mehtodsが無視されるようです... – StupidBird

0

、あなたはXamarinを使用している場合、あなたはそのようTimePickerとオーバーライドSetIs24HourViewをサブクラス化することで同じことを行うことができます。

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; 
    } 
} 
関連する問題