2012-03-08 3 views
3

프로그래밍 방식으로 다중보기를 레이아웃에 추가하는 동안 ProgressDialog를 표시하려고합니다. 주 활동에서 ProgressDialog를 선언 한 다음 배수보기를 추가하는 AsyncTask가 시작되었습니다. AsyncTask의 onPostExecute에서 ProgressDialog가 해제됩니다. 응용 프로그램은 작동하지만 시작 문제는 느리고 ProgressDialog는 잠시 멈 춥니 다. 이것은 AsyncTask의 기본주기입니다. 열은 LinearLayout를 확장합니다.다중보기 추가 고정하기 ProgressDialog

for(int i=0;i<7;i++){     
    ((LinearLayout) Global.a.findViewById(R.id.scrollLayout)).addView(new Column(Global.a,i));     
} 

답변

3

그냥 코드를 기반으로, 그것은 당신을 표시 AsyncTask를의에 ProgressDialog.show을 넣어 무엇을 제안 할 수 있습니다 AsyncTask를 잘못 사용하고 있습니다.

for(int i=0;i<7;i++){ 

    ((LinearLayout) Global.a.findViewById(R.id.scrollLayout)).addView(new Column(Global.a,i));     
} 

이것은 AysncTask에서 절대로해서는 안됩니다. doInBackground가 완료되면 다른 스레드에서 UI를 수정합니다. onPreExecute(), onPostExecute() 또는 onProgressUpdate()를 실행하면 UI 스레드에서 for 루프를 실행합니다.

가장 좋은 방법은 당신이 그것의 수행 방법을 변경해야 다음 AsyncTask를에 뷰를 추가하는 방법에 대한 의도하는 경우가. 비록 이미 여기에 추가 할 전망 xml 파일을 생성하는 것입니다.에 대한

private SomeName extends AsyncTask<Void,Column,Void>{ 
    private Linearlayout layout; 

    protected void onPreExecute(Void... unused){ 
     //UI thread 
     //show dialog 
     layout = (LinearLayout) Global.a.findViewById(R.id.scrollLayout); 
    } 
    protected void doInBackground(Void... unused){ 
     //Background thread 
     for(int i=0;i<7;i++){ 
      //create the view in the background 
      Column column = new Column(Global.a,i); 
      //call publish progress to update the UI     
      publishProgress(column); 
     } 
    } 

    protected void onProgressUpdate(Column... column){ 
     //UI thread 
     //Update the UI 
     layout.addView(column[0]); 
    } 

    protected void onPreExecute(Void... unused){ 
     //UI thread 
     //dismiss dialog 
    } 
} 
+0

탱크가 너무 많이 있습니다. 이제 작동합니다. –

0

당신이 어떤 코드를 게시하지 않았으므로, 내가 만해서 ProgressDialog가 AsyncDialog의 일부가 될 수 있도록하고 onPreExecute

+0

탱크 팁이 있지만 작동하지 않습니다. 일부 코드로 질문을 업데이트했습니다. –