2013-03-05 2 views
2

프로세스가 실행 중일 때 진행 대화 상자를 표시하려고합니다. 프로세스가 완료된 후 닫습니다. 그러나 프로세스가 완료되기 전에 대화 상자가 멈 춥니 다. 내 코드에 무엇을 추가해야합니까?진행 중 대화 상자가 멈 춥니 다.

final ProgressDialog dialog = ProgressDialog.show(this, "","Loading..Wait.." , true); 
     switch (th.getCurrentTab()) { 
     case 0: 
      dialog.show(); 
      Handler menHanlder = new Handler(); 
      menHanlder.postDelayed(new Runnable() { 
       public void run() { 
        for(int i = 0; i < menLV.getCount(); i++) 
        { 
         if(menBooleanArray.get(i) == true) 
         { 
          selectedFromMenList.add(menLV.getItemAtPosition(i).toString()); 
         } 
        } 
        handler.setItemListData(WardrobeActivity.this, "Wardrobe", selectedFromMenList, "Name" , "Men" , "Type"); 
        displayView(); 
        drawer.closeMenu(); 
        refreshTabWidget(); 
        selectedFromMenList.clear(); 
        dialog.dismiss(); 
       } 
      }, 3000); 
      break; 

이 대화 상자를 사용하여 내 접근이 나쁜 않는다 : 여기

내 코드?

모든 의견을 보내 주시면 감사하겠습니다.

답변

9

귀하의 진행 바있다 UI 스레드에서 무거운 작업을 사용자가 UI 스레드에서 무거운 작업을 처리하는 안드로이드 당신이 처리 할 수 ​​있어야하기 때문에 다음과 같이 대신이 목적을 위해 AsyncTask을 사용할 수 있습니다 사이에서 동결 :

public class MyTask extends AsyncTask<Void, Integer, Void>{ 


@Override 
     protected void onPreExecute() { 
//Show progress Dialog here 

     } 


@Override 
     protected void onPostExecute(Voidresult) { 
      //Update UI here if needed 
//Dismiss Progress Dialog here 
     } 

@Override 
     protected String doInBackground(Void... params) { 
      //Do you heavy task here 

     }  

} 
(4) 작업이 실행 된 후 즉시 UI 스레드에서 호출

onPreExecute() 단계를 통해

AsyncTask를 간다.

doInBackground(Param ...)onPreExecute()이 실행 완료 직후 백그라운드 스레드에서 호출됩니다.

onProgressUpdate(Progress...)publishProgress(Progress...)을 호출 한 후 UI 스레드에서 호출됩니다.

onPostExecute(Result)은 백그라운드 계산이 완료된 후에 UI 스레드에서 호출됩니다.

다음과 같이 AsyncTask를 시작

new MyTask().execute(); 
+0

새로운 접근 방식입니다. 고마워요.하지만 어떻게 구현합니까? 그것은 내부 클래스 또는 별도의 클래스가 될 것입니다? 내 진행 대화 상자가 딸깍 소리를 내며 내 청취자를 내면 수업에 넣었다는 뜻인가요? – user1708134

+0

이것은 당신을위한 새로운 기술이 될 것입니다. 그래서 내부 클래스로 만들었고, 나중에 별도의 클래스로 만들 수 있습니다. –

+0

버튼이 진행 ​​막대를 트리거하고 나는 의존 할 것입니다. 어떤 tabhost가 현재 선택되어 있습니까? 그래서 doInBackground 메소드 안에 내 onClick 리스너를 넣으시겠습니까? 그리고 만약 내가 그렇게하면 복잡해질 것이라고 생각합니다. – user1708134

0

을 여기에 AsyncTask를 onPreExecute에서 내 구현

을() 나는 그것보다이

@Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 
     progressDialog = new ProgressDialog(ContentActivity.this); 
     progressDialog.getWindow().clearFlags(
       WindowManager.LayoutParams.FLAG_DIM_BEHIND); 
     progressDialog.setMessage("Loading..."); 
     progressDialog.setCanceledOnTouchOutside(false); 
     progressDialog.show(); 

    } 

onPostExecute 같은 대화 진행률을 표시 (이다) doInBackground에서 작업이 완료되면 호출합니다. 이 진행 대화 상자를 닫습니다.

@Override 
    protected void onPostExecute(BlognoneContent result) { 

     super.onPostExecute(result); 
     .............. 
      if (progressDialog.isShowing()) { 
       progressDialog.dismiss(); 
      } 
      ............. 

} 
관련 문제