2012-12-10 4 views
0

AsyncTask의 onPost에서 레이아웃에 큰 뷰를 추가 할 때 진행 대화 상자가 고정됩니다. 동적 레이아웃을 추가하여 onPost에서 호출 했으므로 (doInBackground에서 발생하는 오류 발생시 opPost에서 호출 했으므로) 이제 레이아웃을로드 할 때 진행 대화 상자가 멈 춥니 다. 나는 분리 된 클래스를 생성하고 클래스 메소드를보기에 레이아웃을 추가 할 때 ProgressDialog가 고정됩니다.

protected void onPostExecute(Void unused) 
     { 

      eLayout=new ExcelLayout(viewScreenActivity); 
      eLayout.LinearLayoutXLSView(ROW_HEIGHT, COL_WIDTH, ROW_Title_Width,NUM_COLS, NUM_ROWS, cols, rows, data); 

      progressdialog.dismiss(); 
     } 

진행률 대화 동결을 불러 작업이 완료 후에 사라 한

제발 도와주세요 ....

+0

'onPostExecute()'메소드에서 대화 상자를 닫지 않으려면 왜이 함수 내에서이 함수를 progressdialog.dismiss();라고 불렀습니까? –

답변

1

이 문제는 주 UI 스레드에서 뷰를 그리는 것과 같은 거대한 프로세스가있을 때 발생합니다. 진행 대화 상자는 매우 가벼운 프로세스이며 일부 다른 프로세스가 우선 순위를 가질 때 순환하지 않고 멈추게됩니다 (단순). 그러나 실제 이유는 진행 대화 상자를 표시하는 것보다 우선 순위가 필요한 다른 프로세스가 있기 때문입니다.

귀하의 경우에 우선 순위를 갖는보기 생성입니다. 따라서 레이아웃을 그리기 시작하기 전에 대화 상자를 닫아야합니다.

그러나보기를 그릴 때 진행 상황 대화 상자를 표시하는 방법을 찾고 있다면 지금까지 경험 한 것부터는 불가능합니다.

편집

그것은 매우 분명 메인 UI가 많은 작업을 수행한다는 것이다. 너는 이걸 시도 할 수는있어.하지만이게 얼마나 효과가 있을지 모르겠다. 그냥 progressdialog.dismiss() 직후에 메소드를 호출하는 대신 해지 리스너를 사용하여 거기에서 메소드를 호출 할 수 있습니다. 예를 들어,

progressDialog.setOnDismissListener(new OnDismissListener(){ 

    public void onDismiss(DialogInterface dialog) { 

    eLayout=new ExcelLayout(viewScreenActivity); 
     eLayout.LinearLayoutXLSView(ROW_HEIGHT, COL_WIDTH, ROW_Title_Width,NUM_COLS, NUM_ROWS, cols, rows, data); 
    }}); 

그래서 이것은() 경우에만 진행 대화 상자의 progressdialog.dismiss 호출되는; 호출됩니다. 그래서 아마 작동해야합니다.

+0

뷰를 추가하기 전에 dismiss 함수를 호출했지만 여전히 앱이 정지되었습니다. –

+0

나는 나의 대답을 편집했다. –

+0

답장을 보내 주셔서 감사합니다 ..... 편집 된 답글로 변경했습니다. 그러나 대화가 닫히면 (레이아웃로드로 인해) 앱이 잠시 작동하지 않습니다. 레이아웃을 구현하는 방법을 변경했습니다. –

관련 문제