2015-11-16 3 views
0

У меня есть форма ввода в действии, где я бы хотел получить время начала и окончания события. Я использую timepicker, отображаемый в фрагменте диалога, чтобы получить время начала и вернуть его в основное действие, но как повторно использовать ту же логику для получения конечного времени события? Мой код:Получение времен от двух TimePickers в DialogFragments

Основная деятельность:

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); 
} 

TimePickerFragment:

public class TimePickerFragment extends DialogFragment { 
int hour,minute; 
private Activity mActivity; 
private TimePickerDialog.OnTimeSetListener mListener; 

@Override 
public void onAttach(Activity activity) { 
    super.onAttach(activity); 
    mActivity = activity; 
    try { 
     mListener = (TimePickerDialog.OnTimeSetListener) activity; 
    } catch (ClassCastException e) { 
     throw new ClassCastException(activity.toString() + " must implement OnTimeSetListener"); 
    } 
} 

@Override 
public Dialog onCreateDialog(Bundle savedInstanceState) { 
    final Calendar c = Calendar.getInstance(); 
    hour = c.get(Calendar.HOUR_OF_DAY); 
    minute = c.get(Calendar.MINUTE); 

    return new TimePickerDialog(mActivity, mListener, hour, minute, 
      DateFormat.is24HourFormat(mActivity)); 
} 

}

мне нужно, чтобы быть в состоянии провести различие между временем начала и окончания времени, но я не уверен, как отличить их, не повторяя себя. Я довольно новичок в Java и Android. Большое вам спасибо за любую помощь.

ответ

0

Возможно, что-то простое, как логическое?

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); 
     } 
    } 
} 
+0

Это было просто и сработало - единственный раз, когда возникает проблема, пользователь пытается чтобы установить конечное время перед установкой времени начала, так как в этом случае логическое значение не переключается правильно. Для моих целей прямо сейчас это работает отлично. Спасибо! – perrysetgo

+0

Рад, что это помогло. Да, есть потенциальные проблемы, и это было основано на иллюстрации того, как решить ваши текущие требования. В идеале вы должны сохранить время начала как объект «Дата» (например), а затем, когда пользователь вводит конечное время, создайте для него другой объект «Дата» и сравните их, чтобы конец был позже начала. Это не слишком сложно сделать, но выходило за рамки того, что вы просили. Есть много примеров для сравнения даты/времени, поэтому я уверен, что вы найдете что-то, если/когда вам нужно. – Squonk

0

Это потребовало бы вы в состоянии извлечь TimePicker из ваших TimePickerFragment

Вы либо должны получить экземпляр TimePicker при создании как TimePickerFragment с и хранить их в двух областях, таких как startTimePicker и finishTimePicker.

Затем, когда TimePicker проходит через onTimeSet, вы можете проверить, что именно TimePicker это так.

if (timePicker == startTimePicker) { 
     startTimeTextView.setText.... 
} else { 
     finishTimeTextView.setText... 
} 
+0

Вы можете объяснить это немного больше? Я не уверен, что вы подразумеваете под «Вам либо нужно получить экземпляр TimePicker при создании как TimePickerFragments, так и сохранить их в двух полях» – perrysetgo