取消TimePickerFragment

时间:2013-12-13 11:06:47

标签: android dialog datetimepicker

我正在使用TimePickerFragment从时间选择器中获取值。我创建了一个透明活动,其onCreate()方法中的代码是

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(...)方法并填充日期值,如果取消对话框,则不应填写该值。所以,当用户点击完成按钮时,我想要获得该事件,然后才能填写值。

1 个答案:

答案 0 :(得分:0)

避免这种情况的一种方法是在单击完成按钮时将布尔变量设置为true,并检查onTimeSet函数内是否为true。还要做以下事情:

声明布尔变量时,将其设置为 false

如果单击完成按钮,请将其设置为 true ;

在onTimeset中,如果布尔变量为true并且您实际上设置了时间,则将布尔变量设置回 false

这样,如果你取消它们就会发生这些onTimeSet()操作的 none ,只有当你点击完成后才会发生。

编辑:要在完成点击事件时使用,请使用以下命令修改您的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变量的要求。

编辑2:

或者,由于您是从对话框片段扩展,请尝试为Dialogfragment定义onCreateDialog的实现,您可以在其中为超类设置bool变量(这是对话框片段),并在操作之前从onCreatedDialog的实现中调用它。这样它可能会起作用。