2011-09-18 6 views
1

스레드가 실행되는 동안 ProgressDialog를 사용하여 회 전자를 표시하고 있습니다. 스레드가 완료되면 대화 상자가보기에서 제거되고 다른 활동이 스택에 푸시됩니다. 문제는 대화 상자가 삭제되지 않는다는 것입니다. 액티비티로 돌아가 스택을 팝하고 이전 액티비티로 돌아 가면 ProgressDialog의 동일한 인스턴스가 호출됩니다 (대화 상자를 표시하라는 메시지가 표시 될 때).() (ShowDialog를)ProgressDialog 처분

dismissDialog(getProgressId()); 

쉬운 솔루션은해서 ProgressDialog를 호출하는 것입니다 :

showDialog(getProgressId()); 

대화 상자를 해제 :

protected Dialog onCreateDialog(int id) { 

progDialog = new ProgressDialog(this); 
progDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER); 
progDialog.setMessage("Searching for ..." + txtPart.getText().toString()); 
// Start thread    
progThread = new AcmXmlSearchHelper(handler, txtTitle.getText().toString(), txtPart.getText().toString(), txtSection.getText().toString(), this); 
progThread.start(); 
return progDialog; 

} 

대화 상자를 표시 :

대화 상자 만들기 고유 한 ID로 그러나, 나는 이것이 좋은 기억의 사용이라고 생각하지 않는다. 나는 많은 Dialog가 메모리에 매달려있을 수 있습니다. 객체가 폐기되었는지 어떻게 확인합니까?

private static class MyTask extends AsyncTask<Void, Void, Void> { 

      protected void onPreExecute() { 
       // Show dialog here - note: showDialog is depricated. 
      } 

      protected Void doInBackground(Void... unused) { 
        // do the stuff that's in your thread here. 
        return null; 
      } 

      protected void onPostExecute(Void unused) { 
        // Dismiss dialog here - note: dismissDialog is depricated. 
      } 
} 
+1

어디에서'showDialog() '를 호출합니까? 'onCreate()','onResume()'? – user802421

+0

@Phil : user802421 님의 댓글이 관련되었을 수 있습니다. 귀하의 질문을 인용하십시오 ... "스레드가 완료되면 대화 상자가보기에서 제거됩니다 ..."-이 경우 정말로 닫히지 만 두 번째 활동에서 돌아 왔을 때 표시됩니다. 처음에 그것을 만든 코드가 두 번째로 호출되는 것을 제안합니다. 그건 그렇고, AsyncTask 대신에'Thread'를 사용하는 이유가 무엇입니까? 'AsyncTask'를 사용하면'onPreExecute'와'onPostExecute' 메소드를 사용하여 진행/경고 대화 상자를 매우 쉽게 처리 할 수 ​​있습니다. – Squonk

+0

감사합니다. AsyncTask를 찾을 것입니다. @ user802421의 질문에 대답하려면 showDialog()가 onClick 이벤트가 호출 될 때 호출됩니다. – PhillyNJ

답변

0

솔루션입니다 removeDialog(id) 대신 dismissDialog(id)를 사용하는 : 당신을 위해 아마 명확한 일까지이 것 중첩 된 AsyncTask를 클래스를 생성

들으