2013-08-08 3 views
-2

버튼을 클릭하면 전체 변수에 추가되는 앱이 있습니다. 그러나 레이아웃을 가로 레이아웃으로 바꾸기 위해 휴대 전화를 돌리면 값이 모두 재설정되고 이것이 왜이며 어떻게 멈추는 지 아이디어가 있습니까?기기를 옆으로 돌릴 때 앱이 값을 재설정합니다.

감사합니다.

+0

방향 변경시 활동의 onCreate가 호출되고 있습니다. –

답변

1

당신은 OnSaveInstanceState에서 변수를 저장하고 onRestoreInstnace 상태 예를 들어

에 복원 할 필요가;

@Override 
public void onSaveInstanceState(Bundle bundle) { 
    bundle.putParcelableArrayList(PEOPLE, people); 
      super.onSaveInstanceState(bundle); 

} 

@Override 
public void onRestoreInstanceState(Bundle bundle) { 
    super.onRestoreInstanceState(bundle); 
    people = bundle.getParcelableArrayList(PEOPLE); 

} 
1

이것은 안드로이드가 (화면 재배치를 포함한) 모든 구성 변경 중에 활동을 처리하는 정상적인 방법은 활동을 파괴하고 다시 작성하기 때문입니다. 가이드 항목 Handling Runtime Changes에 설명 된대로 두 가지 방법으로 처리 할 수 ​​있습니다. '안드로이드 방식'은 onSaveInstanceStateonRestoreInstanceState 메소드를 재정 의하여 활동의 상태 정보를 저장하는 것입니다. 이러한 방법을 사용하는 방법에 대한 자세한 내용은 가이드 항목 Recreating an Activity에서 확인할 수 있습니다.

이 문제를 방지하는 또 다른 방법은 Android에 구성 변경 사항을 내부적으로 처리하도록 Android에 알리는 것입니다. 이렇게하려면 활동에 대한 매니페스트의 <activity> 태그에 android:configChanges="orientation"을 추가하고 실제로 변경 사항을 처리하는 활동의 onConfigurationChanged 메서드를 무시합니다.

3

장치를 이동하면 장치의 방향 상태가 Lanscape에서 Portrait로 세로에서 가로 방향으로 변경됩니다. 오리엔테이션 변경에서 Activity의 onCreate 메서드가 매번 호출됩니다. 따라서 활동의 값이 재설정되고 있습니다.

이 문제를 해결하는 방법에는 두 가지가 있습니다.
1) 활동을 통해 나를 관리하십시오.
2) 상태를 저장하고 복원하여 변경 사항을 관리하십시오.

은 그냥 Manifest.xml 파일에 활동 노드에이 줄을 추가 :

이 문제를 해결하는 첫번째 방법을 사용.

<activity 
android:name=".MyMainActivity" 
android:configChanges="orientation|keyboardHidden|screenSize" 
android:label="@string/app_name" > 

두 번째 방법 사용 :

public void onSaveInstanceState(Bundle bundle) { 
super.onSaveInstanceState(bundle); 
//Manage your Data Explicitly here. 
} 

public void onRestoreInstanceState(Bundle bundle) { 
super.onRestoreInstanceState(bundle); 
//Manage your Data Explicitly here. 
} 

편집
따르면 Android Dev Guide에 :

당신은이 두 가지 방법을 재정의 할 수 있습니다 예를 들어

android:configChanges="orientation|keyboardHidden|screenSize" 

android:configChanges="orientation|keyboardHidden|screenSize"을 사용하는 것은 좋은 습관이 아닙니다.

견적
Note: Using this attribute should be avoided and used only as a last resort. Please read Handling Runtime Changes for more information about how to properly handle a restart due to a configuration change.

페이지 this에서 나는 Handling Run-time Changes의 안드로이드 개발자 가이드를 따라 좋은 사례를 따르도록 당신을 추천합니다.

+0

문제를 마스킹해도 문제가 해결되지 않습니다. 제대로 상태를 저장하고 회전에 복원해야합니다. – natez0r

+0

마스킹 방식이 아닙니다. 안드로이드 OS에게 오리엔테이션 변경 사항을 관리하도록 암시 적으로 알려주는 방법입니다. 귀하의 용어로 '적절한 저장'이 명시적인 방법입니다. 현재 시나리오에는 일부 외부 의도에 종속적 인 onRestore 및 onSaved을 사용하여 명시 적으로 저장해야하는 데이터가 없습니다. –

+0

@ natez0r 이것은 반드시 "문제가되는"것은 아닙니다. Salman은 해답에 대한 설명을 더하고 그에 대한 경고를 적어 두어야한다고 생각합니다. 하지만 구성 변경을 직접 처리하고 지금까지 아무런 문제가 없었습니다. – codeMagic

관련 문제