2016-07-15 13 views
2

마무리되면 내가 가진에서 onCreate/onCreateView 방법에 대한 호출을 방지하기 위해 어떻게 ActivityAfragmentAfragmentA활동이

onAttach() 방법, 나는 몇 가지 조건을 확인해야하고 실패하면, 내가해야하는 호스트 활동을 끝내라. getActivity().finish()으로 전화를 걸어 활동을 마칩니다.

마무리 메서드를 호출 한 후에도 fragmentA에서 여전히 onCreate(), onCreateView()onViewCreated() 메서드를 호출하고 있습니다.

이러한 호출을 중지 할 수있는 방법이 있습니까?

+2

조각에 활동을 추가하기 전에 확인할 수 있습니까? – DeeV

+0

당신의 제안에 감사드립니다 DeeV. 내 경우에는 onAttach() 메서드에서이 검사가 필요합니다. –

답변

1

@DeeV가 주석으로 달았 기 때문에, Fragment을 붙이기 전에 조건을 점검 할 것입니다. 이 경우 더 깨끗한 방법 인 조각 수명주기를 다룰 필요가 없습니다.

이것이 가능하지 않은 경우 해킹 방법이 있습니다. finish()onAttach()에 입력 한 다음 플래그를 반환하는 작업의 메서드 isFinishing()을 사용할 수 있습니다. 나는 이것이 문제를 해결해야한다고 생각한다.

예. 조각의 onCreate 방법 :

if (getActivity().isFinishing()) { 
    // finish was called in onAttach 
} 
+0

Gennadii 감사합니다. 예, 옵션이지만 onCreate(), onViewCreated(), onViewRestored()와 같은 모든 메서드에서 isFinishing) 메소드를 호출합니다. 이 방법으로이 수표를 추가하는 것보다 다른 옵션이 있는지 궁금합니다. –

+0

아니요, 이것을 피할 수는 없습니다. 안드로이드에서 작동하는 방식은 UI 메시지 대기열에 onCreate(), onStart() 등의 메시지를 추가한다는 것입니다. 즉, 대기열에서 명시 적으로 제거하지 않는 한 처리됩니다. 물론 이것을 수행 할'Runnable' 또는 토큰이 없으므로 큐에서 제거 할 수 없습니다. 그래서 당신은'isFinishing()'메쏘드 호출로이 해킹 방법을 사용하거나, 조각 자체를 붙이는 것을 피하십시오. 이 문제를 피할 수 없습니까? 나는 이것이 파편 부착 사건을 피하려고 노력하는 주된 초점이라고 생각한다. –

+0

전체 상황이 나에게 잘못 보입니다. 단편은 활동을 첨부 할 때 활동을 닫아야하는지 결정합니다. 'onAttach'는 액티비티 레퍼런스를 저장하는 것과 같이, 목적을 붙이는 용도로만 사용되어지며, 프래그먼트가 액티비티와의 상호 작용을 위해 사용할 인터페이스로 캐스팅됩니다. 그래서 문제가 유스 케이스 자체에 있고 조각 콜백이 아니라는 것을 확신합니다. 그래서 당신은 기본적으로 그러한 해킹을해야합니다. 조각은 그런 용도로 사용되지 않습니다. –

관련 문제