2013-08-30 4 views
0

저는 처음에는 현재 날짜와 현재 시간을 표시하는 몇 개의 단추가 있습니다. 날짜를 표시하는 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

형태 0-11가 아니라 1-12에 주어진에 그 달을 유의하시기 바랍니다. – rciovati

+0

나는 그것을 안다. 하지만 그건 문제가 아닙니다. 어쨌든 고맙습니다. – Strunk18

답변

0

문제 일 수 있습니다

initDate.set(Calendar.DAY_OF_WEEK, day); 

(setInitDate()) 이것은 요일만을 업데이트합니다. 그래서 날짜는 점프 + -6

사용

initDate.set(Calendar.DAY_OF_MONTH, day); 
관련 문제