2009-07-30 7 views
6

내 활동을 시작하고 인 텐트의 putExtra() 함수를 사용하여 메시지를 전달하는 알림이 있습니다. 그런 다음 메시지는 활동의 onCreate 기능으로 사용자에게 표시됩니다. 오리 엔테이션 변경으로 인해 응용 프로그램이 다시 시작되면 해당 메시지가 의도 된 번들 데이터에 그대로 남아 있으므로 메시지가 다시 표시됩니다.오리엔테이션 변경 후 활동이 다시 작성되기 전에 인 텐트 번들 데이터 변경

어떻게 추가 데이터를 삭제할 수 있습니까?

Bundle bundle = getIntent().getExtras(); 
if (bundle.getBoolean("showMessage")) { 
    // ... show message that is in bundle.getString("message") 
    // remove message 
    bundle.remove("showMessage"); 
} 

그러나 방향이 변경된 후 메시지가 계속 표시됩니다이 사용 의도처럼 보인다 내가 변경 한,하지만 원래되지 않습니다 :

나는 다음 시도했다. 내가 찾은 유일한 대안은 nSaveInstanceState()에 showMessage를 추가로 저장하는 것입니다. 다른 방법이 있습니까? 아니면 갈 길입니까?

답변

20

(단순) 솔루션입니다 :

대신 호출

bundle.remove("showMessage"); 

지금 예상대로 작동

getIntent().removeExtra("showMessage"); 

를 사용합니다. getIntent()와 같습니다. getExtras()는 참조가 아닌 복사본을 반환합니다.

+0

죄송합니다. -1. 'onSaveInstanceState'는 @CommonsWare가 지적한대로 이것을하는 올바른 방법입니다. –

9

onSaveInstanceState() 접근 방식이 정답 AFAIK입니다.