저는 처음에는 현재 날짜와 현재 시간을 표시하는 몇 개의 단추가 있습니다. 날짜를 표시하는 Button을 클릭하면 사용자가 날짜를 선택할 수있는 DatePickerFragment
이 표시되고 Button 텍스트가 사용자가 선택한 날짜로 변경됩니다. 다른 버튼은 똑같지 만 TimePickerFragment
입니다. btnIniTime
는 현재 시간을 표시하고 btnIniDate
는 현재 날짜를 보여줍니다DateFormat이 잘못된 출력을 생성합니다.
private void updateTimeButtons() {
tf.setCalendar(initDate);
String text = tf.format(initDate.getTime());
btnIniTime.setText(text.substring(0, text.lastIndexOf(":")));
}
private void updateDateButtons() {
df.setCalendar(initDate);
btnIniDate.setText(df.format(initDate.getTime()));
}
protected void onCreate(Bundle savedInstanceState){
...
df = DateFormat.getDateInstance();
tf = DateFormat.getTimeInstance();
initDate = new GregorianCalendar();
...
updateDateButtons();
updateTimeButtons();
}
처음 두 버튼은 예상되는 방식으로 동작 :
내가 다음 코드를 사용하는 버튼을 초기화합니다.
내가 말했듯이 사용자가 btnIniTime
버튼을 클릭하면 사용자에게 시간을 선택하도록 묻는 TimePickerFragment
이 표시되고 선택한 시간은 btnIniTime
에 올바르게 표시됩니다.
문제는 btnIniDate
으로 시작하지만 동일해야하지만 TimePickerFragment
대신 DatePickerFragment
을 사용합니다. 사용자가 날짜를 선택하면 버튼에 잘못된 날짜가 표시됩니다. 예를 들어 8 월 30 일 2013을 선택하면 표시된 날짜가 8 월 26 일 2013로 변경됩니다. 2013 년 9 월 1 일을 선택하면 2013 년 9 월 29 일을 보여줍니다.
클래스와 나는 다음과 같은 방법으로 배열 된 날짜 아라 변경하는 데 사용할 방법 : 당신이 버튼을 누르면
public abstract static class DatePickerFragment extends DialogFragment implements DatePickerDialog.OnDateSetListener {
protected TaskActivity activity;
protected Calendar c;
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
this.activity = (TaskActivity) activity;
}
@Override
public abstract Dialog onCreateDialog(Bundle savedInstanceState);
public void onDateSet(DatePicker view, int year, int month, int day) {
if(activity instanceof TaskActivity){
setDateResult(year, month, day);
}
}
protected abstract void setDateResult(int year, int month, int day);
}
public static class InitDatePickerFragment extends DatePickerFragment {
@Override
protected void setDateResult(int year, int month, int day) {
activity.setInitDate(year, month, day);
}
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
final Calendar c = activity.getInitDate();
int year = c.get(Calendar.YEAR);
int month = c.get(Calendar.MONTH);
int day = c.get(Calendar.DAY_OF_MONTH);
// Create a new instance of DatePickerDialog and return it
return new DatePickerDialog(getActivity(), this, year, month, day);
}
}
...
public Calendar getInitDate() {
return initDate;
}
public void setInitDate(int year, int month, int day){
Log.d("TaskActivity", "Year: " + year + "; Month: " + month + "; Day: " + day);
initDate.set(Calendar.YEAR, year);
initDate.set(Calendar.MONTH, month);
initDate.set(Calendar.DAY_OF_WEEK, day);
updateDateButtons();
}
을 : 그건 그렇고
@Override
public void onClick(View v) {
if(v.equals(btnIniDate)){
DialogFragment newFragment = new InitDatePickerFragment();
newFragment.show(getSupportFragmentManager(), "initDatePicker");
}
...
}
을, 날짜를 설정, 로그 캣 다음과 같은 출력 (I 2013에게 년 8 월 (30)를 선택한)이 생성
Year: 2013; Month: 7; Day:30
형태 0-11가 아니라 1-12에 주어진에 그 달을 유의하시기 바랍니다. – rciovati
나는 그것을 안다. 하지만 그건 문제가 아닙니다. 어쨌든 고맙습니다. – Strunk18