2013-02-26 1 views
1

AsyncTask를 실행할 때 진행 표시기를 표시하려고합니다. 이 주식은 못 생겨서 내 레이아웃으로 만들었습니다. 문제가 있지만, 레이아웃을 표시하는 새로운 활동이 필요한 별도의 레이아웃입니다.AsyncTask를 수행하는 동안 Android 사용자 정의 진행 표시기

나는 startActivity (~ progressActivity ~)가 될 수 있다고 생각하고 그것을 파괴 했습니까? 그러나 부모로부터 자녀의 활동을 중단시키는 것은 불가능한 것처럼 보입니다.

AsyncTask-invoking-activity에서 진행 표시기를 숨길 수 있습니다. 그러면 처리 할 때 나머지 레이아웃을 표시하고 숨길 수 있습니다. 이제 메인 레이아웃에 두 개의 하위 레이아웃이 필요하며 매번 숨길 수 있습니다. 이것은 해킹처럼 들리지만 나는 그것을별로 좋아하지 않습니다.

제안 사항?

+2

당신은 대화 사용할 수 있습니다 – pktangyue

+1

** – MAC

답변

2

ProgressBar에 대한 추가 제어가 필요한 경우 WindowManager를 사용하여 모든 항목 위에 뷰를 추가 할 수 있습니다. 추가 레이아웃, 활동 또는 창없이 완료 할 수 있습니다. 일반보기처럼 애니메이션, 터치, 위치 및 가시성을 제어 할 수 있습니다. 완전 작업 코드 :

final ProgressBar view = new ProgressBar(TestActivity.this); 
view.setBackgroundColor(0x7f000000); 
final LayoutParams windowParams = new WindowManager.LayoutParams(); 
windowParams.gravity = Gravity.CENTER; 
windowParams.height = WindowManager.LayoutParams.WRAP_CONTENT; 
windowParams.width = WindowManager.LayoutParams.WRAP_CONTENT; 
windowParams.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE 
     | WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE | WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON 
     | WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN; 
windowParams.format = PixelFormat.TRANSLUCENT; 
windowParams.windowAnimations = 0; 

new AsyncTask<Integer, Integer, Integer>() { 
    public void onPreExecute() { 
     // init your dialog here; 
     getWindowManager().addView(view, windowParams); 
    } 

    public void onPostExecute(Integer result) { 
     getWindowManager().removeView(view); 
     // process result; 
    } 

    @Override 
    protected Integer doInBackground(Integer... arg0) { 
     // do your things here 
     try { 
      Thread.sleep(3000); 
     } catch (InterruptedException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
     return null; 
    } 
}.execute(); 
+0

우수, 내가 필요 정확히 당신의 ** 아름다운 : 사용자 정의 대화 상자 만들기, 못생긴 대화 상자를 사용하지 마십시오! –

0
new AsyncTask<Params, Progress, Result>() { 
    Dialog dlg = new Dialog(); 
    View customProgress; 
    public void onPreExecute() { 
     //init your dialog here; 
     View customProgress = LayoutInflater.from(CurrentActivity.this).inflate(R.layout.your_progress_layout, null, false); 
     dialog.setContentView(view); 
     dialog.show(); 
    } 
    public Result doInBackground(Params... params) { 
    // do something 
    publishProgress(progress); 
    } 
    public void onProgressUpdate(Progress progress) { 
    // do something with progressView; 
    } 
    public void onPostExecute(Result result) { 
     dlg.dissmiss(); 
     // process result; 
    } 
}.execute(); 

이 가능한 방법입니다 (샘플에만 오류가있을 수 있습니다.)