2

다음과 같은 행동이 가능한지 물어보고 싶습니다. 만약 그렇다면 어떻게 할 수 있습니까? 매우 구체적인 이유로이 행동이 필요합니다. 세로 방향으로, 활동가에서활동을 일시 중지했을 때와 같은 방향으로 다시 시작 하시겠습니까?

, 나는 (고정 가로 방향가) 활동 B를 시작 :

내가이 개 활동을, 나는 활동 A와 활동 B. 지금의이 예를 살펴 보자 그들을 호출 . 사용자는 B 액티비티가 가로 방향으로 표시 될 때 분명히 장치를 회전시킵니다. 활동 B가 완료되고 활동 A가 재개됩니다. 사용자는 장치를 가로 방향으로 유지하여 활동 A의 방향이 즉시 재개되는 즉시 다시 변경됩니다.

내가 원했던 것은 사용자가 다시 돌아올 때 활동 A의 방향이 바뀌는 것을 피하는 것입니다. 지난 오리엔테이션에서 활동 A를 다시 시작하고 그 후에 오리엔테이션 변경 만 허용하려고합니다.

사용자가 언제든지 방향을 변경할 수 있도록하려는 경우 방향을 잠글 수 없습니다.

android : configChanges = "orientation | screenSize"솔루션은 방향 변경 후 내 활동을 다시 만들고 싶지 않기 때문에 옵션이 아닙니다.

내가 원하는 것을 얻을 수있는 옵션이 있습니까?

감사합니다.

EDIT : 활동 A가 삭제되기 전에 현재 방향을 저장하고 다시 만들 때 복원하는 것도 옵션이 아닙니다. 활동 B는 활동 B가 끝난 후 다시 작성하면 안됩니다.

EDIT 2 : 나는 지금 생각하고 있었고 다른 관점에서 질문을 다시 쓸 수 있다는 것을 깨달았습니다.

활동 B가 완료된 후 다시 시작될 때 활동 A의 재 작성을 피하고 싶습니다.

Afaik, 장치 방향이 변경되면 메시지가 ActivityThread로 보내집니다 (RELAUNCH_ACTIVITY 값). 이로 인해 액티비티 A가 새 화면 방향으로 다시 생성됩니다.

나는 내 문제를 해결할 수있는 활동을 다시 시작하고 마지막 방향을 유지하려고합니다.

+0

활동이 다시 생성되는 시점을 제어 할 수 없습니다. 활동의 상태를 다른 클래스로 정의하고 onSaveInstanceState/onCreate에 저장/복원해야합니다 (http://developer.android.com/reference/android/app/Activity.html#onSaveInstanceState(android.os). 묶음) 그 상태는 마지막 방향성을 포함 할 수 있습니다. –

+0

그게 내가 다른 경우에하는 일이지만,이 특별한 경우에는 할 수 없습니다. 현재 활동 A의 인스턴스를 유지해야합니다. –

+0

그렇게 할 수 없습니다. Android는 언제든지 내 활동을 중단시킬 수 있습니다. 안드로이드는 서비스를 죽일 수 있지만 당신은 서비스에 죽이고 싶지 않은 것을 옮길 수 있습니다. –

답변

2

나는 당신이 설명한대로이 작업을 수행 할 수 있습니다 생각하지 않는다 onResume에서 복원 할 수있다. 사용자가 가로 액티비티에서 이전 액티비티로 돌아 오면 방향을 세로로 고정해야합니다 (휴대 전화가 현재있는 가로 방향을 무시하기 위해). 이제 사용자가 휴대 전화를 돌리면 회전이 표시되지 않으며 방향을 변경할 수 없습니다. 사용자가 방금 전화를 돌렸는지 또는 회전이 가로 전용 활동에서 돌아 왔는지 여부를 알 수 없으므로이 두 조건을 구분할 수 없습니다.

그러나, 당신은 어떻게 든이 2가지 경우를 구별 할 수있는 가정, 다음을 시도해보십시오 :

것은 당신이 당신에게 다음, 안드로이드는 (심지어 특정 상황에서) 오리엔테이션 변화에 활동을 다시하지 않으려면 매니페스트에

android:configChanges="orientation|screenSize" 

을 설정하여 Android에 방향 변경 사항을 처리하겠다고 알릴 필요가 있습니다.

이제 원하는 동작을 얻으려면 을 구현해야합니다. 활동이 고정 오리엔테이션으로 다른 활동을 시작한 경우 해당 활동을 시작하기 전에 현재 화면 오리엔테이션을 저장하는 것이 좋습니다. 사용자가 활동으로 돌아 오면 Android가이를 파괴하지 않고 새로운 인스턴스를 만듭니다. 을 호출합니다. 전화가 오면 사용자가 방금 장치를 돌렸는지 또는 방향 고정 된 활동에서 돌아온 결과인지 확인해야합니다. 다른 액티비티를 실행 한 후 반환하는 경우 setRequestedOrientation()을 호출하여 화면 방향을 이전 방향으로 고정 할 수 있습니다. 사용자가 바로 전화를 회전 할 경우, 당신은 다음 중 하나를 수행 할 수 있습니다

  • Activity.recreate() 주를 호출하여 활동을 다시 만들기 :이 비로소 작동 당신은 API 수준에서 실행중인 경우 11 이상
  • 에 의해 활동을 다시 작성 Views (call setContentView())을 다시 만들고 액티비티를 다시 생성 한 것처럼 멤버 변수를 재설정하는 데 필요한 모든 것을 기본적으로 수행하는 자신의 메서드 호출하기
  • 액티비티를 다시 시작하여 액티비티를 다시 생성합니다. startActivity(new Intent(this, this.class)을 호출 한 다음 finish()을 호출하여 현재 인스턴스.
+1

이게 가장 좋은 해결책 인 것처럼 보이고 내가 원하는 것을 성취 할 수있는 모든 방법을 아는 것이 좋다. 답변 주셔서 감사합니다! –

0

당신은 아마 중지시의 공유 환경 설정()에서 활동의 현재 방향을 저장하고()

+0

좋은 해결책이지만 활동을 다시 만들지 않고 마지막으로 사용한 오리엔테이션을 유지하고 싶다는 말을 잊어 버렸습니다. 어쨌든 고마워! –

+0

다음 onResume –