オプション]メニューをクリックして遅延が遅れたProgressBarディスプレイ

StackOverflow https://stackoverflow.com/questions/6320421

質問

オプションメニューで選択されたProgressBar onitemを表示することに問題に直面しています。私のコードはここにあります:

case R.id.mnuLogout:

                showDialog(Constants.PROGRESS_DIALOG);
                closeOptionsMenu(); 

                             if(MyApp.IsLoggedOut())
                    handler.sendEmptyMessage(Constants.LOGOUT);
                 else
                        handler.sendEmptyMessage(Constants.ERROR_MSG);  

ProgressBarは、Isloggedメソッドの完了後に表示されます。

役に立ちましたか?

解決

あなたは呼んでいます get() 直後 AsyncTask この方法はタスクが終了するまで待機するため、実行されて非同期動作を失います。トライ/キャッチブロックにすべてのコードを追加する必要があります AsyncTask.onPostExecute() また、このメソッドからダイアログを却下します。

void doLogout() {
    new LogoutTask().execute();
}

void dispatchLogoutFinished() {
    dismissDialog(Constants.PROGRESS_DIALOG);
    if (MyApp.IsLoggedOut()) {
        // do something
    } else {
        // do something else
    }
}

private class LogoutTask extends AsyncTask<Void, Void, Void> {
    protected void onPreExecute() {
        TheActivity.this.showDialog(Constants.PROGRESS_DIALOG);
    }

    protected Void doInBackground(Void... params) {
        return null;
    }

    protected void onPostExecute(Long result) {
        TheActivity.this.dispatchLogoutFinished();
    }
}

そして、私はあなたがハンドラーにメッセージを送る必要はないと思います。 dispatchLogoutFinished() UIスレッドで実行されるため、同期する必要はありません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top