2014-11-05 2 views
0

AlertDialogAsyncTask에 전화하려고합니다. 이 코드를 작성했지만 작동하지만 AlertDialog의 항목을 선택한 다음 uiHandler.getLooper().quit();을 호출하여 코드 처리를 계속하면 AlertDialog은 멈 춥니 다 (작업이 완료 될 때까지 닫히지 않고 머물러 있음). 그러나 backgroundUI는 계속 처리합니다. 나는 무한 루프가 끝나기 전에 AlertDialogdismiss() 메서드를 수행 할 시간이 없기 때문이라고 생각합니다. 제발,이 문제를 해결하도록 도와주세요. 이 방법은 doInBackground에서만 수행해야합니다.AlertDialog 핸들을 doInBackground에 사용하십시오.

@Override 
protected Void doInBackground(Void... arg0) { 
    Looper.prepare(); 
    final Handler uiHandler = new Handler(); 
    uiHandler.post(new Runnable() { 
     public void run() { 
      AlertDialog.Builder chooser = new AlertDialog.Builder(ctx); 
      facultyChooser.setTitle("Choose") 
        .setCancelable(false) 
        .setItems(faculties, new DialogInterface.OnClickListener() { 
         @Override 
         public void onClick(DialogInterface dialog, int item) { 
          uiHandler.getLooper().quit(); 
         } 
        }) 
        .create() 
        .show(); 
     } 
    }); 
    Looper.loop(); 
} 

추신 : 쉽게 읽을 수 있도록 전체 코드가 아닙니다.

답변

0

당신은 doInBackground (onPreExecute) 전에 경고를 실행하고 (onPostExecute) 후 대화 상자를 닫습니다

+0

doInBackground는 데이터를 구문 분석합니다. AlertDialog를 호출하는 날짜에 따라 달라 지므로 사용자가 옵션을 선택하고 구문 분석을 계속합니다. post 실행에서 나는 saved 파싱 된 데이터이고 close AlertDialog는 poseExecute 메서드에서 sence가 없다. – AskQuestion

0

기술적으로, AsyntaskdoInBackground() 방법에 UI 관련 작업을 수행 할 passible되지해야합니다. AlertDialog을 보려면 onPostExecute(/onPreExecute()을 Asyntask로 사용해야합니다.