2013-05-16 3 views
1

У меня есть приложение, в котором используется пользовательская команда выбора даты. когда пользователь выбирает время и нажимает кнопку SET, он получает время, установленное на счетчике. Мое приложение проверяет время и, если оно не подходит по некоторым критериям, я снова показываю счетчик.TimePicker не обновляется с пользовательского ввода

Проблема заключается в том, что пользователь меняет время на счетчике на второе или последующее время, начальное время все еще установлено. Как я могу получить время со счетчика, отраженного в объекте dateTime?

Я пробовал вызывать TPic.getCurrentHour и т. Д., А также refreshDrawableState на объекте TPic, но он по-прежнему не работает. Есть идеи?

Button ShowDTPicker; 
     Button ShowDatePicker; 
     Button ShowTimePicker; 
     Button Set; 
     Button ReSet; 
     Button Cancel; 
     DatePicker DPic; 
     TimePicker TPic; 
     TextView Date; 
     private ViewSwitcher switcher; 
     static final int DATE_TIME_DIALOG_ID = 999; 
     Dialog dialog; 

     public void showDateTimeDialog(){ 


     //final Calendar c = Calendar.getInstance(); 

     final SimpleDateFormat dfDate = new SimpleDateFormat("dd-MMM-yyyy HH:mm"); 



      dialog = new Dialog(NfcscannerActivity.this); 
      dialog.setContentView(R.layout.datetimepicker); 
      switcher = (ViewSwitcher) dialog.findViewById(R.id.DateTimePickerVS); 

      TPic = (TimePicker) dialog.findViewById(R.id.TimePicker); 
      DPic = (DatePicker) dialog.findViewById(R.id.DatePicker); 
      TPic.setIs24HourView(true); 



      ShowDatePicker = ((Button) dialog.findViewById(R.id.SwitchToDate)); 
      ShowDatePicker.setOnClickListener(new OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        switcher.showPrevious(); 
        ShowDatePicker.setEnabled(false); 
        ShowTimePicker.setEnabled(true); 
       } 
      }); 
      ShowTimePicker = ((Button) dialog.findViewById(R.id.SwitchToTime)); 
      ShowTimePicker.setOnClickListener(new OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        switcher.showNext(); 
        ShowDatePicker.setEnabled(true); 
        ShowTimePicker.setEnabled(false); 
       } 
      }); 

      Set = ((Button) dialog.findViewById(R.id.SetDateTime)); 
      Set.setOnClickListener(new OnClickListener() { 
       @Override 
       public void onClick(View v) { 

        Calendar c = Calendar.getInstance(); 
        c.set(DPic.getYear(), DPic.getMonth(), DPic.getDayOfMonth(), TPic.getCurrentHour(), TPic.getCurrentMinute()); 
        Log.e(TAG, "TPic hour and minute = " + TPic.getCurrentHour() + " " + TPic.getCurrentMinute()); 
        timeSetOnSpinner = new DateTime(c); 


................ 
................ 
............... 
      //check if time is suitable, if not call showDateTimeDialog() again 


       } 
      }); 
      ReSet = ((Button) dialog.findViewById(R.id.ResetDateTime)); 
      ReSet.setOnClickListener(new OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        Calendar c = Calendar.getInstance(); 
        DPic.updateDate(c.get(Calendar.YEAR), c.get(Calendar.MONTH), c.get(Calendar.DAY_OF_MONTH)); 
        TPic.setCurrentHour(c.get(Calendar.HOUR_OF_DAY)); 
        TPic.setCurrentMinute(c.get(Calendar.MINUTE)); 
       } 
      }); 
      Cancel = ((Button) dialog.findViewById(R.id.CancelDialog)); 
      Cancel.setOnClickListener(new OnClickListener() { 
       @Override 
       public void onClick(View v) { 

        dialog.cancel(); 



       } 
      }); 

      dialog.setTitle("Please enter time of last logout"); 

      try{ 
       ReSet.performClick(); 
      dialog.show(); 
      }catch(Exception e){ 
       //ignore 
      } 
      Log.e(TAG,"Just executed dialog.show() and at the end of showDateTimeDialog method"); 
     }//showDateTimeDialog() 

     @Override 
     protected Dialog onCreateDialog(int id) { 
      switch (id) { 
      case DATE_TIME_DIALOG_ID: 

       return dialog; 
      } 
      return null; 
     } 

.

<?xml version="1.0" encoding="UTF-8"?> 
<RelativeLayout 

    android:padding="5dip" 
    android:fitsSystemWindows="true" 
    android:layout_height="wrap_content" 
    android:layout_width="fill_parent" 
    android:id="@+id/DateTimePicker" 
    xmlns:android="http://schemas.android.com/apk/res/android"> 

    <LinearLayout 

     android:layout_height="wrap_content" 
     android:layout_width="fill_parent" 
     android:id="@+id/ViewSwitchButtons" 
     android:layout_marginBottom="5dip"> 

     <Button 
      android:layout_height="wrap_content" 
      android:layout_width="0dip" 
      android:id="@+id/SwitchToDate" 
      android:text="Set date" 
      android:enabled="false" 
      android:layout_weight="1"/> 

     <Button 
      android:layout_height="wrap_content" 
      android:layout_width="0dip" 
      android:id="@+id/SwitchToTime" 
      android:text="Set time" 
      android:layout_weight="1"/> 

     </LinearLayout> 

     <ViewSwitcher 
      android:layout_height="wrap_content" 
      android:layout_width="fill_parent" 
      android:id="@+id/DateTimePickerVS" 
      android:layout_below="@+id/ViewSwitchButtons" 
      android:outAnimation="@android:anim/fade_out" 
      android:inAnimation="@android:anim/fade_in"> 



       <LinearLayout 
        android:layout_height="fill_parent" 
        android:layout_width="fill_parent" 
        android:id="@+id/TimeLayout" 
        android:fillViewport="true"> 

        <TimePicker 
         android:layout_height="wrap_content" 
         android:layout_width="fill_parent" 
         android:id="@+id/TimePicker" 
         android:layout_marginRight="5dip" 
         android:layout_marginLeft="5dip"/> 

        </LinearLayout> 

       <LinearLayout android:layout_height="fill_parent" 
       android:layout_width="fill_parent" 
       android:id="@+id/DateLayout" 
       android:fillViewport="true"> 

       <DatePicker 
        android:layout_height="wrap_content" 
        android:layout_width="fill_parent" 
        android:id="@+id/DatePicker" 
        android:layout_marginRight="5dip" 
        android:layout_marginLeft="5dip"/> 

       </LinearLayout> 

        </ViewSwitcher> 

        <LinearLayout 
         android:layout_height="wrap_content" 
         android:layout_width="fill_parent" 
         android:id="@+id/ControlButtons" 
         android:layout_below="@+id/DateTimePicker" 
         android:paddingTop="185dip"> 

         <Button 
          android:layout_height="wrap_content" 
          android:layout_width="0dip" 
          android:id="@+id/SetDateTime" 
          android:text="@android:string/ok" 
          android:layout_weight="1"/> 

          <Button 
           android:layout_height="wrap_content" 
           android:layout_width="0dip" 
           android:id="@+id/ResetDateTime" 
           android:text="Reset" 
           android:layout_weight="1"/> 

          <Button 
           android:layout_height="wrap_content" 
           android:layout_width="0dip" 
           android:id="@+id/CancelDialog" 
           android:text="@android:string/cancel" 
           android:layout_weight="1"/> 

           </LinearLayout> 

           </RelativeLayout> 
+0

Где находится ваш onTimeChangedListener? –

ответ

0

У меня такая же проблема (с asp.net хотя) ... я знаю, что это связано с тем, что новый выбранный период времени не был рассмотрен в ходе постбэка поэтому обновления Безразлично «Даже когда-либо ... Я также знаю, что у меня была такая же проблема с выбором даты и решить проблему, сохраняя значения в скрытых областях, которые я извлекаю в коде. Итак, в принципе, это то же самое здесь, нам нужна функция javascript для хранения значений th в скрытом поле, которые будут найдены позже. Эта функция может быть запущена с действием OnClientClick на вашей кнопке отправки. Но у меня возникают проблемы с поиском того, как получить значения из timePicker в javascript, я не нашел точной документации. Надеюсь, это помогло, поддержите нас, пожалуйста, если вы найдете какое-либо решение.

3

Android: How to get the time from a TimePicker when it is typed in

Похоже, что DatePicker или обновляет TimePicker собственные значения, когда исчезает его фокус. Используйте метод clearFocus() в OnClickListener кнопки набора.

Я думаю, что код будет выглядеть так:

Set = ((Button) dialog.findViewById(R.id.SetDateTime)); 
Set.setOnClickListener(new OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     DPic.clearFocus(); 
     TPic.clearFocus(); 

     Calendar c = Calendar.getInstance(); 
     c.set(DPic.getYear(), DPic.getMonth(), DPic.getDayOfMonth(), 
       TPic.getCurrentHour(), TPic.getCurrentMinute()); 
     Log.e(TAG, "TPic hour and minute = " + TPic.getCurrentHour() 
       + " " + TPic.getCurrentMinute()); 
     timeSetOnSpinner = new DateTime(c); 
    } 
}); 

Пожалуйста, обратите внимание, что ShowDTPicker, ShowDatePicker, ShowTimePicker, Set, ReSet, Cancel, DPic, TPic, Date не следующий Java naming conventions. Имена с заглавной буквой для classes or interfacesDate класс также существует!). Если они являются переменными открытого класса, каждая их первая буква должна быть строчной. Также используйте mSwitcher вместо switcher, так как это переменная частного класса.

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