Я хочу показать Progress-Dialog перед загрузкой моего представления. Сначала я написал код в onCreate(), но в этом случае диалог не появляется. Поэтому я написал его в onResume(), но в этом случае он не исчезает даже после загрузки представления. может ли кто-нибудь сказать, что здесь происходит?
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();
dialog = ProgressDialog.show(this, "", "Please wait...", true);
//dialog.cancel();
new Thread()
{
public void run()
{
try
{
sleep(1500);
// do the background process or any work that takes time to see progress dialog
}
catch (Exception e)
{
Log.e("tag",e.getMessage());
}
// dismiss the progressdialog
dialog.dismiss();
}
}.start();
citySelected.setText(fetchCity);
spinner.setSelection(getBG);
}
Вы не можете обновить интерфейс (который находится в основном UIthread) из других потоков. Если вы хотите выполнить любой запрос в фоновом режиме, вы можете использовать AsyncTask.
В методе onPreExecute, show dialog и onPostExecute вы можете отменить диалог.
Если вы хотите использовать Thread, обновите интерфейс с помощью обработчиков.
Использование AsyncTask
public class MyAsyncTask extends AsyncTask<String, Void, String> {
ProgressDialog dialog = new ProgressDialog(ActivityName.this);
@Override
protected void onPreExecute() {
dialog.show();
super.onPreExecute();
}
@Override
protected String doInBackground(String... params) {
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(String result) {
dialog.dismiss();
super.onPostExecute(result);
}
}
В Activity onCreate Method,
MyAsyncTask task = new MyAsyncTask();
task.execute();
лучше использовать Asynctask
........., но если вы все еще хотите того же или хотите know the solution only
тогда, можете попробовать
new Thread()
{
public void run()
{
try
{
sleep(1500);
// do the background process or any work that takes time to see progress dialog
}
catch (Exception e)
{
Log.e("tag",e.getMessage());
}
YourActivity.this.runOnUIThread(new Runnable(){
@Override
public void run(){
// dismiss the progressdialog
dialog.dismiss();
});
}
}.start();
Вы можете использовать AsyncTask. Это лучше, чем Thread
private class DownloadingProgressTask extends
AsyncTask<String, Void, Boolean> {
private ProgressDialog dialog = new ProgressDialog(ShowDescription.this);
protected void onPreExecute() {
this.dialog.setMessage("Please wait");
this.dialog.show();
}
protected Boolean doInBackground(final String... args) {
try {
downloadFile(b.getString("URL"));
return true;
} catch (Exception e) {
Log.e("tag", "error", e);
return false;
}
}
@Override
protected void onPostExecute(final Boolean success) {
if (dialog.isShowing()) {
dialog.dismiss();
}
}
}