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的实现中调用它。这样可能行得通