0

ListActivityクラスがあり、リストのいずれかの項目をクリックすると、新しいアクティビティが表示されます。新しいアクティビティの読み込みには時間がかかるので、何かが起こっていることをユーザーに知らせてもらいたい(進行状況ダイアログの形で)

だから、これを行うために、私はこのように私のクラスに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.
}

最初にクリックして新しいアクティビティが読み込まれると、進行状況ダイアログは正常に機能しますが、前のアクティビティを閉じると(このリストに戻るために)、進行状況ダイアログは引き続き実行されます。新しいアクティビティが開始されている間だけ進行状況ダイアログを表示したい。

誰かがこれを正しく行う方法を教えてもらえますか?

4

1 に答える 1

4

ダイアログは、プログラマーが明示的に削除する(またはユーザーが閉じる)必要があります。したがって、次のように実行する必要があります。

アクティビティ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();
}

ほとんどのユースケースではありますが、重い作業は呼び出し先のアクティビティで行う必要があります。onCreate呼び出し先の重い作業が行われる場合、次のようになります。

アクティビティB(呼び出し先):

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();
}

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

于 2011-02-18T11:17:24.163 に答える