Моя проблема действительно странная. Сценарий довольно прост: я не хочу показывать диалог прогресса, пока моя активность загружает содержимое URL-адресов.
Сначала я попытался отобразить ProgressDialog только сам по себе, без каких-либо специальных функций внутри. Хорошо работает. Но как только я добавил функцию, которая загружает URL-адреса, программа сначала загрузила эти URL-адреса, а затем отобразила индикатор выполнения. Вот мой код:
progDialog = new ProgressDialog(this);
progDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
progDialog.setMessage("Logging in ...");
progDialog.show();
client = new GameClient(context, universe, username, password);
client.login();
progDialog.dismiss();
Ничего особенного. Но по какой-то причине активность сначала делает "login-part", а затем пытается отобразить диалог, но он все равно не появляется...
Не могли бы вы дать мне подсказки для решения проблемы?
Используйте класс ProgressDialog, чтобы показать его.
/*****************************************
* AsyncTask Class to Parse and Display
******************************************/
class AsyncTaskClassName extends AsyncTask<Void,Void, Void>{
ProgressDialog progressDialog = null;
/* ***********************************
* Pre-Execute Method
* ********************************** */
@Override
protected void onPreExecute() {
progressDialog = util.getProgressDialog(ActivityClassName.this, "Please wait...", "Parsing List... ");
//ActivityClassName -> The Name of the Activity Class you want to show ProgressDialog
// progressDialog.hide();
progressDialog.show();
/* Do your Pre-Execute Configuration */
}
/* ***********************************
* Execute Method
* ********************************** */
@Override
protected Void doInBackground(Void... arg0) {
/* Do yourxec Task ( Load from URL) and return value */
return null;
}
/* ***********************************
* Post-Execute Method
* ********************************** */
@Override
protected void onPostExecute(Void result) {
progressDialog.dismiss();
/* Do your Post -Execute Tasks */
}
Вам нужно запустить логин в отдельном потоке, чтобы он не блокировал поток пользовательского интерфейса, как этот
...
progDialog.show();
new Thread(new Runnable() {
@Override
public void run() {
client = new GameClient(context, universe, username, password);
client.login();
progDialog.dismiss();
}
}).start();
или использовать AsyncTask. См. Http://developer.android.com/resources/articles/painless-threading.html.