Java 从DialogFragments中的两个时间选择器检索时间
我在活动中有一个输入表单,我想在其中检索事件的开始时间和结束时间。我正在使用一个显示在对话框片段中的时间选择器来获取开始时间并将其返回到主活动,但是如何重新使用相同的逻辑来检索事件的结束时间呢?我的代码: 主要活动:Java 从DialogFragments中的两个时间选择器检索时间,java,android,android-dialogfragment,android-timepicker,Java,Android,Android Dialogfragment,Android Timepicker,我在活动中有一个输入表单,我想在其中检索事件的开始时间和结束时间。我正在使用一个显示在对话框片段中的时间选择器来获取开始时间并将其返回到主活动,但是如何重新使用相同的逻辑来检索事件的结束时间呢?我的代码: 主要活动: public class AddEventActivity extends AppCompatActivity implements TimePickerDialog.OnTimeSetListener{ private int pickerHour = 0; private in
public class AddEventActivity extends AppCompatActivity implements TimePickerDialog.OnTimeSetListener{
private int pickerHour = 0;
private int pickerMin = 0;
//code ommitted for length
public void showTimePickerDialog(View v) {
TimePickerFragment newFragment = new TimePickerFragment();
newFragment.show(getFragmentManager(), "timePicker");
}
public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
String amOrPm = "am";
pickerHour = hourOfDay;
pickerMin = minute;
String minutesString = "";
if (hourOfDay > 12){ //translate to 12 hr clock. Little workaround to get both timepicker and am/pm label to show up correctly.
amOrPm = "pm";
pickerHour-=12;
}
if (pickerMin < 10) {
minutesString = "0"; //fix weird bug where only one zero is shown on times ending in :00
}
startTimeView.setText(pickerHour + " : " + minutesString + pickerMin + " " +amOrPm );
}
}
我需要能够区分开始时间和结束时间,但我不知道如何在不重复自己的情况下区分它们。我对Java和Android还很陌生。非常感谢您的帮助。这要求您能够从
TimePickerFragment
中检索TimePicker
创建两个TimePickerFragment
s时,您需要获取TimePicker
实例,并将它们存储在两个字段中,例如startTimePicker
和finishTimePicker
然后,当通过onTimeSet
传入TimePicker
时,您可以检查哪个TimePicker
是这样的
if ( timePicker == startTimePicker ) {
startTimeTextView.setText....
} else {
finishTimeTextView.setText...
}
可能是像布尔值这样简单的东西
public class AddEventActivity extends AppCompatActivity implements TimePickerDialog.OnTimeSetListener{
...
boolean isSettingStartTime = true;
//code ommitted for length
public void showTimePickerDialog(View v) {
TimePickerFragment newFragment = new TimePickerFragment();
newFragment.show(getFragmentManager(), "timePicker");
}
public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
...
if (isSettingStartTime) {
startTimeView.setText(pickerHour + " : " + minutesString + pickerMin + " " +amOrPm );
isSettingStartTime = false;
} else {
endTimeView.setText(pickerHour + " : " + minutesString + pickerMin + " " +amOrPm );
}
}
}
这很简单,而且有效——唯一出现问题的时候是,如果用户在设置开始时间之前尝试设置结束时间,就像在这种情况下,布尔值没有正确切换一样。就我现在的目的而言,这很好。非常感谢。很高兴这有帮助。是的,有潜在的问题,它是基于如何解决您当前的需求的一个例子。理想情况下,您可以将开始时间存储为一个
Date
对象(例如),然后当用户输入结束时间时,为该时间创建另一个Date
对象,并对两者进行比较,以确保结束时间晚于开始时间。这并不太难,但超出了你要求的范围。这里有很多比较日期/时间的例子,所以我相信你会在需要的时候找到一些东西。你能再解释一下吗?我不确定您所说的“当您创建两个TimePickerFragment并将它们存储在两个字段中时,您需要获取TimePicker实例”是什么意思
public class AddEventActivity extends AppCompatActivity implements TimePickerDialog.OnTimeSetListener{
...
boolean isSettingStartTime = true;
//code ommitted for length
public void showTimePickerDialog(View v) {
TimePickerFragment newFragment = new TimePickerFragment();
newFragment.show(getFragmentManager(), "timePicker");
}
public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
...
if (isSettingStartTime) {
startTimeView.setText(pickerHour + " : " + minutesString + pickerMin + " " +amOrPm );
isSettingStartTime = false;
} else {
endTimeView.setText(pickerHour + " : " + minutesString + pickerMin + " " +amOrPm );
}
}
}