2012-06-14 2 views
2

나는 (온라인으로 뭔가하기 때문에) 약 3 ~ 5 초가 걸리는 방법 설정이 있는데, 나는 로딩 대화 상자를 보여주고 싶다.하지만 어떻게 할 수 있을지 상상해 본다. 사람이 어떤 제안이 있는가,Android에서 메소드를 실행하는 동안로드 대화 상자를 표시 하시겠습니까?

dialog.show(); 
myMethod(); 
dialog.cancel(); 

그러나 그것은 작동하지 않았다 : 나는 그 방법을 호출 직후이 같은 그것을 해제하려고?

답변

7

AsyncTask를 내 Favouite하지만 당신이 너무 :

이 좋은 blog을 통해 갈 시간을 투자 핸들러를 사용할 수 있습니다.

다음 스 니펫이 도움이 될 것입니다.

package org.sample; 

    import android.app.Activity; 
    import android.app.ProgressDialog; 
    import android.os.Bundle; 
    import android.os.Handler; 

    public class Hello extends Activity { 

     private Handler handler; 
     private ProgressDialog dialog; 

     @Override 
     protected void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 

      dialog = new ProgressDialog(this); 
      dialog.setMessage("Please Wait!!"); 
      dialog.setCancelable(false); 
      dialog.setProgressStyle(ProgressDialog.STYLE_SPINNER); 
      dialog.show(); 

      new Thread() { 
       public void run() { 
        // Do operation here. 
        // ... 
        // ... 
        // and then mark handler to notify to main thread 
        // to remove progressbar 
        // 
        // handler.sendEmptyMessage(0); 
        // 
        // Or if you want to access UI elements here then 
        // 
        // runOnUiThread(new Runnable() { 
        // 
        //  public void run() { 
        //   Now here you can interact 
        //   with ui elemements. 
        // 
        //  } 
        // }); 
       } 
      }.start(); 

      handler = new Handler() { 
       public void handleMessage(android.os.Message msg) { 
        dialog.dismiss(); 
       }; 
      }; 
     } 
    } 
+0

나는 그것을 사용하려고했지만 계속 "보기 계층 구조를 만든 원래 스레드 만보기를 만질 수 있습니다." 오류. 그리고 그게 무슨 뜻인지 모르겠 군 ... 롤 ... 어떤 제안? –

+0

스레드에서 UI 요소에 액세스하려고합니다. 왜이 오류가 발생하는지 알려주십시오. –

+0

업데이트 된 답변보기 –

0

UI 스레드에서 장시간 작업을 실행하는 것은 "아니오"입니다. AsyncTask을 사용하여 백그라운드에서 장기간 작업을 실행하고 UI가 완료되면 업데이트하십시오.

관련 문제