2011-09-20 7 views
0

예를 들어 번들 인스턴스를 사용하여 대화 상자의 상태를 저장하는 방법에 대한 많은 주제가 있습니다. 그러나 대화 상자를 "올바르게"재설정하는 방법을 찾지 못하는 것 같습니다.안드로이드 대화 상자 재설정

public class CustomDialog extends Dialog { 
    public CustomDialog (Context context) { super (context); } 

    protected onCreate (Bundle savedInstanceState) { 
    super.onCreate (savedInstanceState); 

    setContentView(R.layout.input_query); 
    EditText txt = (EditText) findViewById(R.id.input_text); 

    // Consider that I'm declaring here the use of listeners 
    // in order to retrieve input text. 
    } 
} 

버튼이 주요 활동에 클릭 할 때이 대화 상자를 진열하고 있습니다 :

이 샘플 사용자 정의 대화 상자를 고려합니다 (XML 레이아웃 ID를 가진 글고 "input_text와"를 수행). 이 동작이 두 번째로 발생하면 내 EditText에 이전 인스턴스의 입력이 포함됩니다.

이제이 EditText의 내용을 재설정 할 수 있지만이 작업을 수행 할 수있는 이미 존재하는 일반적인 방법이 있는지 궁금합니다. 예를 들어 좀 더 복잡한 대화 상자가있는 경우이 객체가 인스턴스화 될 때마다 "기본"값이 필요합니다. 내가 super.onCreate(savedInstanceState);에 대한 호출을 제거하는 것이 트릭을 할 수 있다고 생각했지만 그렇지 않습니다.

죄송합니다. 바보 같은 질문 인 경우 (또는 이미 답변 한 경우 ... 찾지 못했습니다.) 도움을 주시면 감사하겠습니다. 고마워요!

답변

4

일반적으로 onCreateDialogonPrepareDialog 활동을 무시해야합니다.

처음으로 대화 상자를 만들려면 onCreateDialog이 호출되므로이 방법으로 대화 상자를 만들어야합니다. 대화 상자의 내용을 초기화/업데이트하려면 onPrepareDialog을 덮어 씁니다. 대화 상자를 표시하기 전에 항상 호출됩니다.

+1

사실, Dev Guide는 정확히 다음과 같이 말합니다 : http://developer.android.com/guide/topics/ui/dialogs.html#ShowingADialog : "If 'onPrepareDialog()'를 정의하지 않으면 대화 상자는 이전에 열렸던 것과 동일하게 유지됩니다. " 고마워요! – piwi

+0

덕분에 많은 도움이되었습니다. –

1

showDialog()와 반대되는 메소드를 사용해보십시오. removeDialog()가 그 메소드입니다. 나는 너와 비슷한 문제를 겪고 있었다. 내가 보여주는 모든 대화 상자에는 첫 번째 인스턴스의 데이터가있었습니다. removeDialog()를 사용하기 시작했을 때 내용이 제대로 업데이트되고있었습니다.

+0

removeDialog를 호출하면 생성 된 대화 상자의 캐싱이 효과적으로 비활성화되고 강제로 다시 만들어집니다. 성능을 위해 필자는 대답과 같이 onPrepareDialog 메서드를 재정의해야합니다. –

+0

실제로, 나는 내 context에서 removeDialog()를 호출 할 수있는 곳을 보지 못했다.'showDialog (INPUT_TEXT) '를 호출 한 직후에 호출해야한다고 가정하지만, 대화 상자를 표시하지 않는다. 대화 상자가 자신의 종류의 스레드에서 실행되는 것으로 추측됩니다. 따라서 이미 표시되기 전에 이미 제거되었습니다. 나는 틀린가? 어쨌든 덕분에, 그것은이 방법에도 내 관심을 끌었습니다 ;-) – piwi

관련 문제