2012-12-04 2 views
1

GridView을 사용하여 간단한 달력을 만들었으며 세로보기에서 가로보기 (또는 뒤로)로 전환 할 때마다 상태가 유지되지 않습니다. 예를 들어, 나는 세로보기에서 1 월로 바뀌고 풍경에서는 12 월으로 돌아갑니다. 나는 그것을 해결하기 위해 노력하고 내 OnCreate()이 코드를 추가 :세로에서 가로로 전환 할 때보기의 상태 저장

if(savedInstanceState != null && savedInstanceState.containsKey(CALENDAR)){ 
     mCalendar = (Calendar) savedInstanceState.getSerializable(CALENDAR); 
    }else{ 
    mCalendar = Calendar.getInstance(); 
    } 

그리고 클래스에이 방법을 추가 :

@Override 
    public void onSaveInstanceState(Bundle outState){ 
     super.onSaveInstanceState(outState); 

     //Save the calendar instance in case the user changed it 
     outState.putSerializable(CALENDAR, mCalendar); 
    } 

불행하게도 그것이 작동하지 않으며, 달은 여전히 ​​전환 유지 전화 방향을 변경할 때 처음으로 누군가 나를 도울 수 있습니까?


코드 :

public void onCreate(Bundle savedInstanceState){ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_calendar); 

    mCalendar = Calendar.getInstance(Locale.getDefault()); 
    month = mCalendar.get(Calendar.MONTH) + 1; 
    year = mCalendar.get(Calendar.YEAR); 

    previous = (Button) findViewById(R.id.b_prevMonth); 
    next = (Button) findViewById(R.id.b_nextMonth); 
    displayMonth = (TextView) findViewById(R.id.et_displayMonth); 
    gv_daysOfWeek = (GridView) findViewById(R.id.gv_daysOfWeek); 
    gv_calendar = (GridView) findViewById(R.id.gv_calendar); 

    previous.setOnClickListener(this); 
    next.setOnClickListener(this); 
    displayMonth.setText(DateFormat.format(monthDisplay, mCalendar.getTime())); 

    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.weekdays_grid, R.id.grid_item_label, WEEK_DAYS); 
    gv_daysOfWeek.setAdapter(adapter); 

    setGridCellAdapter(month, year); 

    if(savedInstanceState != null && savedInstanceState.containsKey(CALENDAR)){ 
     mCalendar = (Calendar) savedInstanceState.getSerializable(CALENDAR); 
    }else{ 
     mCalendar = Calendar.getInstance(); 
    } 
} 

/** 
* Method responsible for intialising the adapter 
*/ 
private void setGridCellAdapter(int month, int year) { 
    cellAdapter = new GridCellAdapter(getApplicationContext(),R.id.day_gridcell, month, year); 
    mCalendar.set(year, month - 1 , mCalendar.get(Calendar.DAY_OF_MONTH)); 
    displayMonth.setText(DateFormat.format(monthDisplay, mCalendar.getTime())); 
    cellAdapter.notifyDataSetChanged(); 
    gv_calendar.setAdapter(cellAdapter); 
} 
+2

더 많은 코드를 게시하십시오. 어떻게 mCalendar를 사용하고 있는지 잘 모릅니다 – dymmeh

+0

조각입니까? 활동입니까? – Sam

+0

활동입니다. –

답변

3

당신은 당신이의 GridView를 설정 한 완료 될 때까지 저장된 상태를 읽고되지 않습니다 ... 읽을 주위 코드를 변경 저장된은 처음 진술 :

if(savedInstanceState != null && savedInstanceState.containsKey(CALENDAR)){ 
    mCalendar = (Calendar) savedInstanceState.getSerializable(CALENDAR); 
}else{ 
    mCalendar = Calendar.getInstance(Locale.getDefault()); 
} 
month = mCalendar.get(Calendar.MONTH) + 1; 
year = mCalendar.get(Calendar.YEAR); 

// Initialize your Buttons and such... 

setGridCellAdapter(month, year); 

mCalendar을에 설정하려고 시도하는 다른 코드를 제거하십시오..

mCalendar.set(year, month - 1 , 1); 

제안 :

+0

작동합니다! 많이 sooo 감사합니다 :)! –

0

이 시도하면 더 간단 할 것입니다 대신 달력의 저장 및 복구 대상으로 월을 사용하는 경우.