버튼을 클릭하면 전체 변수에 추가되는 앱이 있습니다. 그러나 레이아웃을 가로 레이아웃으로 바꾸기 위해 휴대 전화를 돌리면 값이 모두 재설정되고 이것이 왜이며 어떻게 멈추는 지 아이디어가 있습니까?기기를 옆으로 돌릴 때 앱이 값을 재설정합니다.
감사합니다.
버튼을 클릭하면 전체 변수에 추가되는 앱이 있습니다. 그러나 레이아웃을 가로 레이아웃으로 바꾸기 위해 휴대 전화를 돌리면 값이 모두 재설정되고 이것이 왜이며 어떻게 멈추는 지 아이디어가 있습니까?기기를 옆으로 돌릴 때 앱이 값을 재설정합니다.
감사합니다.
당신은 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);
}
이것은 안드로이드가 (화면 재배치를 포함한) 모든 구성 변경 중에 활동을 처리하는 정상적인 방법은 활동을 파괴하고 다시 작성하기 때문입니다. 가이드 항목 Handling Runtime Changes에 설명 된대로 두 가지 방법으로 처리 할 수 있습니다. '안드로이드 방식'은 onSaveInstanceState
및 onRestoreInstanceState
메소드를 재정 의하여 활동의 상태 정보를 저장하는 것입니다. 이러한 방법을 사용하는 방법에 대한 자세한 내용은 가이드 항목 Recreating an Activity에서 확인할 수 있습니다.
이 문제를 방지하는 또 다른 방법은 Android에 구성 변경 사항을 내부적으로 처리하도록 Android에 알리는 것입니다. 이렇게하려면 활동에 대한 매니페스트의 <activity>
태그에 android:configChanges="orientation"
을 추가하고 실제로 변경 사항을 처리하는 활동의 onConfigurationChanged
메서드를 무시합니다.
장치를 이동하면 장치의 방향 상태가 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의 안드로이드 개발자 가이드를 따라 좋은 사례를 따르도록 당신을 추천합니다.
문제를 마스킹해도 문제가 해결되지 않습니다. 제대로 상태를 저장하고 회전에 복원해야합니다. – natez0r
마스킹 방식이 아닙니다. 안드로이드 OS에게 오리엔테이션 변경 사항을 관리하도록 암시 적으로 알려주는 방법입니다. 귀하의 용어로 '적절한 저장'이 명시적인 방법입니다. 현재 시나리오에는 일부 외부 의도에 종속적 인 onRestore 및 onSaved을 사용하여 명시 적으로 저장해야하는 데이터가 없습니다. –
@ natez0r 이것은 반드시 "문제가되는"것은 아닙니다. Salman은 해답에 대한 설명을 더하고 그에 대한 경고를 적어 두어야한다고 생각합니다. 하지만 구성 변경을 직접 처리하고 지금까지 아무런 문제가 없었습니다. – codeMagic
방향 변경시 활동의 onCreate가 호출되고 있습니다. –