2012-01-27 3 views
2

조각에서 나쁜 동작을 이해하려고합니다. onCreateViewonActivityCreated 메서드가 호출 되어도 조각이 레이아웃에서 보이지 않더라도 호출됩니다. 당신이 코드를 사용하는 경우컨테이너를 제거하면 동적으로 추가 된 조각이 제거되지 않습니다.

:

TestFragment testFragment = new TestFragment(); 
FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); 
ft.add(R.id.fragmentDetail, testFragment, "test"); 
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE); 
ft.commit(); 

조각과 아이디 fragmentDetail으로 FrameLayout이 교체를 한 다음 장치를 회전, 조각 방법은 아직 컨테이너가 세로 더 이상 존재하지 않는 경우에도 호출됩니다 형세. '정적'<fragment> 태그를 사용하면 이러한 일이 발생하지 않습니다. 정적 조각을 사용하는 경우 조각이 나타날 때 조각 메서드가 호출됩니다. 프래그먼트 태그를 사용하지 않고 동일한 동작을 수행 할 수 있습니까? 프래그먼트가 레이아웃에없는 경우 렌더링을 피하는 방법이 필요합니다.

감사

+0

이 질문은 유용 할 수도있다. http://stackoverflow.com/questions/6164341/handling-orientation-changes-with-fragments –

답변

2

이 문제가 하나 발견되었습니다. 조각 정적이 경우 (레이아웃에 투입 할 때의 경우를 피할 수있는이 방법으로

public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 
    if (!fragment.isInLayout() && container == null) return null; 
    ... 
    } 

컨테이너가 null하지만 방법 isInLayout은()가 true를 돌려 : 그것은 제안 Handling orientation changes with Fragments 하나 약간 다릅니다 . 그건 그렇고 나에게도 이상한 행동이다.

0

AFAIK는 조각 활동으로 거의 작동합니다. 그들은 동일한 수명주기를 가지고 있습니다. http://developer.android.com/reference/android/app/Fragment.html#Lifecycle 그래서 그들에 대한 참조가 없다면, 그것들을 닫을 수는 없습니다. 그들은 시스템에 의해 참조되고 스스로 살아갑니다. 그래서, 어떻게 든 끝내야합니다.

+0

네, 좋겠다. 초상화에 나타나지 않는 조각을 제거하려면 어떻게해야할지 모르겠다. – Matroska

+0

FragmentManager를 통해 조각을 제거 – Gangnus

+0

popBackStack (String name, int flags) 관리자의 프래그먼트 백 스택에서 마지막 프래그먼트 트랜지션을 팝합니다. – Gangnus

관련 문제