2013-12-13 8 views
0

Я использую TimePickerFragment, чтобы получить значение от времени picker.I создал прозрачную деятельность и ее код в методе onCreate() являетсяОтмена TimePickerFragment

DialogFragment newFragment = new TimePickerFragment(); 
    newFragment.show(getFragmentManager(), "timePicker"); 

    newFragment.setCancelable(true); 

Класса TimePickerFragment() выглядит следующим образом:

@SuppressLint("ValidFragment") 
    public class TimePickerFragment extends DialogFragment implements 
      TimePickerDialog.OnTimeSetListener { 

     @Override 
     public Dialog onCreateDialog(Bundle savedInstanceState) { 
      // Use the current time as the default values for the picker 

       final Calendar c = Calendar.getInstance(); 
      hour = c.get(Calendar.HOUR_OF_DAY); 
      minute = c.get(Calendar.MINUTE); 

      return new TimePickerDialog(getActivity(), this, hour, minute, 
        false); 
     } 

     @Override 
     public void onTimeSet(TimePicker view, int hourOfDay, int minute) { 

      hour = hourOfDay; 
      minute = minute; 
      Date date = new Date(); 
      date.setHours(hour); 
      date.setMinutes(minute); 

      // updateTime(hour, minute); 

      Adapter.Time = date; 

      this.dismiss(); 
     } 

     @Override 
     public void onDismiss(DialogInterface dialog) { 
      // TODO Auto-generated method stub 
      super.onDismiss(dialog); 

     } 

     @Override 
     public void dismiss() { 
      // TODO Auto-generated method stub 
      super.dismiss(); 

     } 

    } 

Проблема в том, что я сделал этот диалог Cancelable(true), который отлично работает. Но когда я отменяю диалог или нажимаю кнопку «Готово», он выполняет метод onTimeSet(...), и значения даты заполняются, которые не должны заполняться в случае отмены диалога. Итак, я хочу получить событие, когда пользователь нажимает кнопку «Готово» и только затем значения, которые нужно заполнить.

ответ

0

Одним из способов избежать этого может быть установка переменной boolean в значение true, когда вы нажимаете кнопку «Готово» и проверяете, является ли это истиной внутри вашей функции onTimeSet. Также выполните следующие действия:

при объявлении булевой переменной задайте ее как false.

Если нажата кнопка нажата, установите ее как true;

в onTimeset, если булева переменная истинна и вы на самом деле установить время, установить логическую переменную обратно в ложной.

Этот способ, none этих операций onTimeSet() произойдет, если вы отмените его, только если вы нажмете кнопку «Готово», это произойдет.

EDIT: Для использования на клик случае сделать, изменить свой OnCreate диалог с помощью этого:

public Dialog onCreateDialog(Bundle savedInstanceState) { 
    // Use the Builder class for convenient dialog construction 
    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); 
    builder.setMessage(MainActivity.message) 
    .setTitle("Put any title") 
      .setPositiveButton("Done", new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int id) { 

       final Calendar c = Calendar.getInstance(); 
         hour = c.get(Calendar.HOUR_OF_DAY); 
         minute = c.get(Calendar.MINUTE); 

        return new TimePickerDialog(getActivity(), this, hour, minute, 
       false); 


       } 
      }) 
      .setNegativeButton("Cancel", new DialogInterface.OnClickListener() { 
     public void onClick(DialogInterface dialog, int id) { 
//do nothing here 


} 
    }); 

Я думаю, что мой редактировать исключит требование переменной BOOL тоже.

Edit 2:

Или так вы расширяете из диалогового фрагмента, попробуйте определяя реализацию onCreateDialog для Dialogfragment где вы установите переменное Ую для вашего супер класса (который является dialogfragment) и вызывать его из реализация onCreatedDialog перед операциями. Таким образом, это может сработать.

+0

Но я не могу получить событие щелчка кнопки Готово. –

+0

Как вы устанавливаете положительный и отрицательный регистр Готово и отмените кнопки в диалоговом окне. Пожалуйста, добавьте этот код тоже :) – SoulRayder

+0

Check my edit .. возможно, это поможет вам. – SoulRayder