1

ビューが読み込まれる前に 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);
}
4

3 に答える 3

1

他のスレッドからUI(メインUIスレッドにある)を更新することはできません。バックグラウンドでクエリを実行する場合は、AsyncTaskを使用できます。

onPreExecuteメソッドで、ダイアログを表示し、onPostExecuteでダイアログを閉じることができます。

スレッドを使用する場合は、ハンドラーを使用してUIを更新します。

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

}

アクティビティonCreateメソッドで、

MyAsyncTask task = new MyAsyncTask();
    task.execute();
于 2012-06-25T08:08:48.010 に答える
0

使用する方が良い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();
于 2012-06-25T08:13:04.677 に答える