Android TimePickerFragment的取消

Android TimePickerFragment的取消,android,dialog,datetimepicker,Android,Dialog,Datetimepicker,我正在使用TimePickerFragment从时间选择器获取值。我创建了一个透明的活动,它在onCreate()方法中的代码是 DialogFragment newFragment = new TimePickerFragment(); newFragment.show(getFragmentManager(), "timePicker"); newFragment.setCancelable(true); TimePickerFragment()类如下所示: @Suppr

我正在使用
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();

        }

    }

问题是我使这个对话框
可取消(true)
工作正常。但是,当我取消对话框或单击“完成”按钮时,它会执行
onTimeSet(…)
方法,并填充日期值,如果取消对话框,则不应填充日期值。因此,我想在用户单击“完成”按钮时获取事件,然后才获取要填充的值。

避免这种情况的一种方法是,在单击“完成”按钮时将布尔变量设置为true,并检查在onTimeSet函数中是否为true。还应执行以下操作:

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

如果单击了“完成”按钮,则将其设置为true

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

这样,如果取消,这些onTimeSet()操作都不会发生,只有单击“完成”时才会发生

编辑:要使用“完成”的单击事件,请使用以下命令修改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:


或者,由于您是从dialog fragment进行扩展,请尝试为Dialogfragment定义onCreateDialog的实现,在该实现中,您为您的超类(即Dialogfragment)设置bool变量,并在操作之前从onCreatedDialog的实现中调用它。这样可能会奏效

但我甚至无法获得“完成”按钮的单击事件。您如何在对话框中设置“完成”和“取消”按钮的正负格。也请添加代码:)是的,如果我使用了简单的timePicker,但我使用了TimePickerFragment,并且如果您看到它实现的类TimePickerDialog.OnTimeSetListener,它有自己的方法来显示对话框,那么这可能会很有用。单击“完成”和单击“取消”时,尝试查看执行进展到哪里,使用打印语句。然后相应地使用bool变量方法。或者,由于您是从dialog fragment扩展而来,请尝试为Dialogfragment定义onCreateDialog的实现,在该实现中为您的超类(即Dialogfragment)设置bool变量,并在操作之前从onCreatedDialog的实现中调用它。这样可能行得通