2011-02-18 11 views
0

私はListActivityクラスを持っていて、リスト内のアイテムがクリックされると新しいアクティビティが表示されます。新しいアクティビティにはロードに時間がかかりますので、ユーザーに何か起こっていることを知りたい(進捗ダイアログの形で)Android - 進行状況ダイアログが閉じない

これを実行するために、私はこのようなクラスでRunnableを実装しました -

public class ProtocolListActivity extends ListActivity implements Runnable { 
private ProgressDialog progDialog; 
.... 
protected void onListItemClick(ListView l, View v, int position, long id) { 
        progDialog.show(this, "Showing Data..", "please wait", true, false); 

    Thread thread = new Thread(this); 
    thread.start(); 
} 
.... 
public void run() { 
    // some code to start new activity based on which item the user has clicked. 
} 

は最初に、私がクリックしたときに、新しい活動がロードされる進捗ダイアログがまだ実行されている、プログレスダイアログがうまく動作しますが、私は前のアクティビティを閉じたときに(バックこのリストに取得します)。新しいアクティビティが開始されている間だけ、進行状況ダイアログが表示されるようにします。

これを正しく行う方法について教えてもらえますか?

答えて

3

ダイアログをプログラマが明示的に削除する(またはユーザが閉じる)必要があります。だから、それはこのような方法で行われるべきである:アクティビティA(アクティビティを呼び出す)で

protected void onListItemClick(ListView l, View v, int position, long id) { 
    progDialog.show(this, "Showing Data..", "please wait", true, false); 

    Thread thread = new Thread(this){ 
     // Do heavy weight work 

     // Activity prepared to fire 

     progDialog.dismiss(); 
    }; 
    thread.start(); 
} 

ほとんどのユースケースでは、重い作業は、呼び出し先の活動にすべきです。

アクティビティB(呼び出し先):ケースでは、重い作業が呼び出し先のonCreateに行われ、それは次のようにする必要があります

onCreate(){ 
    progDialog.show(this, "Showing Data..", "please wait", true, false); 

    Thread thread = new Thread(this){ 
     // Do heavy weight work 

     // UI ready 

     progDialog.dismiss(); 
    }; 
    thread.start(); 
} 

とにかく、考え方は同じです。

関連する問題