2013-04-26 2 views
1

기본적으로 tabBar의 활동 만 사용하여 SherlockFragments을 사용하여 supportActionBar에서 내 애플리케이션을 업데이트했습니다. 당신이 생각할 큰 문제는 아니었고 나도 마찬가지였습니다. 모든 것은 모든 테스트를 통해 완벽하게 작동했습니다. 그러나 새 버전을 출시 할 때 사용자는 불만을 터뜨 렸으며 getSherlockActivity()을 호출 할 때 조각이 NPE를 던지는 수많은 충돌을보고하기 시작했습니다.활동이없는 Android 조각입니다. 폐기해도 안전한가요?

이 문제에 대해 읽었으며 더 이상 활동에 첨부되지 않지만 어떤 이유로 든 실행되는 인스턴스 상태 및 조각을 복원하는 데 문제가 있습니다. 내 문제에 대한 구체적인 해결책을 찾지 못했습니다 (이후대신 내 작업 표시 줄을 표시하기 위해 actionBar를 사용하고 있기 때문에).

지금 null을 호출하는 이러한 조각을 버릴 수 있다면 getSherlockActivity()을 호출하면됩니다. 그들은 어떤 활동에도 붙어 있지 않기 때문에 보이지 않습니까?

그렇지 않은 경우 어떻게하면이 문제를 해결할 수 있습니까? 이미 해당 조각을 만들기 전에 이미 존재하는 조각에 대해 FragmentManager을 검사하고 있지만 충분하지 않습니다.

도와주세요!

답변

0

아무 것도 버릴 필요가 없습니다. Fragment에서 필요한 모든 검사가 필요합니다. onAttach()가 호출되기 전에 (onCreate()보다 먼저 호출되었으므로 getSherlockActivity()를 사용하지 않아야합니다. 문제가 아니어야하며 onDetach()가 호출 된 후).

if (isAdded() && !isDetached()) 

또는

final SherlockActivity a = getSherlockActivity(); 
if (a != null) 

괜찮 작동 할 수 있습니다.

+0

이 솔루션을 사용하면 개발자 콘솔의 오류 보고서가 표시되지 않지만 증상 만 예방할 수 있습니다. 예를 들어 리소스 등을로드하기위한 활동이 필요합니다. 또한, 문제는 분리되어 있지만 어떻게 든 메모리에 남아서 나중에 어떤 방식으로 재사용되는 단편에 있다고 생각합니다. 나는이 접근법을 지금 시도 할 것이고 나는 어떤 결과들도 가지고 다시보고 할 것이다. – Lars

+1

그들이 분리되어 있다면, 그들과 함께 아무것도 할 필요가 없다. 그들은 더 이상 보이지 않으며 파괴 될 때까지 기억에 남아 있습니다. –

+0

도와 주셔서 감사합니다. 나는 당신의 해결책을 시도 할 것입니다. 그것이 작동하면 나는 그것을 정답으로 표시 할 것입니다. – Lars