2013-07-26 3 views
3

나는을 가지고 있는데, 여기에 setArguments()를 사용하여 일부 URL을 전달합니다.조각에서 인수를 지우는 방법은 무엇입니까?

키가 인데 내 인스턴스가 AudioPlayerFragment 인 경우 오디오 스트림을 재생하는 서비스를 시작합니다. 이미 재생중인 스트림이있는 경우 중지하고 새 스트림으로 다시 시작합니다.

인수가 없으면 아무 것도하지 않습니다.

내 문제는 인수가 인스턴스와 함께 유지되므로 다시 설정하면 은 새 인수가 설정되지 않은 경우 최신 인수 집합을 반환합니다.

그래서 그들을 읽은 후, 나는

setArguments(null); 

으로 null로 인수를 설정하려고하지만

Java.lang.IllegalStateException: fragment already active 

가 어떻게 다음 인수를 취소 할 수 있습니다거야?

+1

여기를보세요 : http://stackoverflow.com/a/15084683/1276374 –

답변

8

조각에서 을 읽었는지 확인하십시오. 프래그먼트가 생성되면 다시 돌아와서 물통 onCreate()을 전달할 수 없으므로 인수를 다시 읽을 수 없어야합니다.

여전히 작동하지 않으면 부울 플래그를 사용하고 인수를 한 번만 읽을 수 있습니다. 이 같은

뭔가 :

if(!argumentsRead){ 

    // read arguments 

    argumentsRead = true; 
} 
+0

예. 부울 플래그가 유일한 선택입니다 ... thx – jul

0

인수를 변경하지 마십시오. 인수없이 인수를 다시 인스턴스화하고 이전 인수로 대체하십시오.

UI를 다시 만들고 싶지 않고 음악이나 오디오 만 변경하려는 경우 조각에서 오디오 기능을 분리하여 헤드리스 유지 부분에 넣으면 좋습니다.

+0

사실, 홈 버튼을 클릭했을 때를 제외하고 앱으로 돌아 가면 같은 인스턴스가 호출됩니다. – jul

+1

savedInstanceState를 사용할 수 있습니다. 당신은 sate onSaveInstanceState를 저장할 수 있습니다. 그리고 조각의 onCreate() 함수를 사용하면 먼저 savedState와 인수를 확인할 수 있습니다. savedState가 있다면 단순히 Arguments를 보지 마십시오. – tasomaniac

12

전화 this.getArguments().clear();에서 onDestroyView 당신의 조각에서() 방법.

0

조각에서 인수를 제거하려는 경우가 있습니다. 예를 들어 처음으로 조각을 입력하면 데이터가 최신 상태 일 수 있지만 조각을 다시 만들면 해당 데이터는 원하지 않으므로 새로 고칩니다. 이 같은 번들의 요소를 취소 할 수 :

getArguments().remove("cartDetails"); 

을 내가 쓴 내 경우, 나는 넣어 그 조각에서 onCreate에서 초기 데이터를받은 후.

관련 문제