2014-06-19 1 views
6

내 활동에서 다음 코드를 사용하여 프래그먼트를 추가했습니다.오리 엔테이션 변경시 Android Fragment Animation이 다시 반복됩니다.

FragmentTransaction ft = getFragmentManager().beginTransaction(); 
ft.setCustomAnimations(R.anim.right_to_left_in, R.anim.right_to_left_exit,R.anim.left_to_right_in,R.anim.left_to_right_exit); 
DetailsFragment newFragment = DetailsFragment.newInstance(); 
ft.replace(R.id.details_fragment_container, newFragment, "detailFragment"); 
ft.commit(); 

조각이 들어가고 있습니다. 애니메이션이 제대로 표시되지 않습니다. 그러나 장치 방향을 결정할 때 Fragment Manager는 동일한 애니메이션이 포함 된 조각을 추가하려고합니다. 매우 이상하게 보입니다. 사용자가 장치 방향을 지정할 때 애니메이션을 원하지 않습니다.

오리엔테이션에서 조각의 레이아웃 디자인을 변경하고 싶기 때문에 onConfigChanges='orientation'을 매니페스트에 추가하고 싶지 않습니다.

답변

0

Android는 방향 변경의 경우 자동으로 기존 조각을 활동에 다시 첨부합니다. 따라서 수동으로 할 필요가 없습니다. 당신은 널 (null)에 대한 활동의 ​​onCreate 방법 savedInstanceState 변수를 확인하고가 null의 경우에만 경우 애니메이션 단편을 대체 할 수있다 :

if (savedInstanceState == null) { 
    FragmentTransaction ft = getFragmentManager().beginTransaction(); 
    ft.setCustomAnimations(R.anim.right_to_left_in, R.anim.right_to_left_exit,R.anim.left_to_right_in,R.anim.left_to_right_exit); 
    DetailsFragment newFragment = DetailsFragment.newInstance(); 
    ft.replace(R.id.details_fragment_container, newFragment, "detailFragment"); 
    ft.commit(); 
} 
+0

답변 해 주셔서 감사합니다. 내 활동에 이미이 논리가 있습니다. 조각을 다시 추가하지 않았습니다. 조각 관리자가 방향에 조각을 다시 첨부하려고하면 이미 트랜잭션에 저장된 애니메이션이 적용됩니다. (나는 조각이 추가되었을 때 나는 설정했다.) –

3

유일한 방법 나는이에게 단편 인스턴스를 유지하지 이었다 피할 수 있습니다. DetailsFragment 님의 onCreate 방법 사용 setRetainInstance(false);

+0

해답을 주셔서 감사합니다. 나는 점검하고 갱신 할 것이다! –

+0

명성! 그것의 작동! setRetainInstance (false)를 설정하는 동안 다른 부작용을 확인합니다 (아무 것도 없습니까?). –

+1

문제는 조각이 유지되지 않는다는 것입니다 - 자세한 내용은 여기를 참조하십시오 : http://stackoverflow.com/a/11318942/667202 – AdamVe

관련 문제