views:

1710

answers:

1

Hi,

I'm trying to create a ProgressDialog for an Android-App (just a simple one showing the user that stuff is happening, no buttons or anything) but I can't get it right. I've been through forums and tutorials as well as the Sample-Code that comes with the SDK, but to no avail.

This is what I got:

    btnSubmit.setOnClickListener(new View.OnClickListener() {
      public void onClick(View view) {
        (...)
          ProgressDialog pd = new ProgressDialog(MyApp.this);
          pd.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
          pd.setMessage("Working...");
          pd.setIndeterminate(true);
          pd.setCancelable(false);

          // now fetch the results
          (...long time calculations here...)

          // remove progress dialog
          pd.dismiss();

I've also tried adding pd.show(); and messed around with the parameter in new ProgressDialog resulting in nothing at all (except errors that the chosen parameter won't work), meaning: the ProgressDialog won't ever show up. The app just keeps running as if I never added the dialog.

I don't know if I'm creating the dialog at the right place, I moved it around a bit but that, too, didnt't help. Maybe I'm in the wrong context? The above code is inside private ViewGroup _createInputForm() in MyApp.

Any hint is appreciated,

Greetings, Select0r

+2  A: 

you have to call pd.show before the long calculation starts and then the calculation has to run in a separate thread. A soon as this thread is finished, you have to call pd.dismiss() to close the prgoress dialog.

here you can see an example:

the progressdialog is created and displayed and a thread is called to run a heavy calculation:

@Override
    public void onClick(View v) {
       pd = ProgressDialog.show(lexs, "Search", "Searching...", true, false);
       Search search = new Search(   ...   );
       SearchThread searchThread = new SearchThread(search);
       searchThread.start();
    }

and here the thread:

private class SearchThread extends Thread {

        private Search search;

        public SearchThread(Search search) {
            this.search = search;
        }

        @Override
        public void run() {         
            search.search();
            handler.sendEmptyMessage(0);
        }

        private Handler handler = new Handler() {

            @Override
            public void handleMessage(Message msg) {
                displaySearchResults(search);
                pd.dismiss();
            }
        };
    }
Roflcoptr
I've rebuild have of my app to get this done :) The tutorials I read sounded like this was possible without another thread, but you never stop learning. I'm not done completely: now the ProgressDialog doesn't show where it should (at least it shows!), but just "flashes" shortly before the results come in, but now I think I can make the rest on my own ;) Thanks a lot for your help!
Select0r
Just to complete this, in case somebody is interested: the "flashing" of the ProgressDialog is something that only happens in the emulator, it doesn't occur on the actual device. It seems that the emulator takes loooong seconds before the request (onClick) is actually processed and the app freezes until that happens. On the device, everythings ok.
Select0r