我正在使用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(...)
方法并填充日期值,如果取消对话框,则不应填写该值。所以,当用户点击完成按钮时,我想要获得该事件,然后才能填写值。
答案 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的实现中调用它。这样它可能会起作用。