2012-03-08 18 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であれば、他のどこでも(onPreExecute()、onPostExecute()またはonProgressUpdate()を実行してUIスレッドでforループを実行していれば、別のスレッドからUIを変更しています)

最善の解決策は、あなたがすでにそれでそれに追加するビューのXMLファイルを作成することです。けれども、あなたがAsyncTaskにビューを追加することで意図しているならば、あなたはそのを行う方法を変更する必要があります。

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

タンク用私はいくつかのコードで質問を更新しました。 –

関連する問題