How to start and finish progressBar dynamically in

2019-02-16 00:49发布

When I skip second activity class from first activity class, I will start imageprocessing on certain image in second activity and then until new image comes to screen I wnt to start progress bar and then finish when the new image comes to screen. How can I do this ?

4条回答
家丑人穷心不美
2楼-- · 2019-02-16 01:04

Use ProgreaaDialog and AsyncTask. you wil get your soultion Use AsyncTask in doBackInGroundProcess do image processing. and in doPostExecute() exit or cancel the progress dialog

have a look on the sample code. To start AsyncTsk use new ProgressTask().execute(null); from the activity where you want to do image processing.

    private class ProgressTask extends AsyncTask<String, Void, Boolean> {
        private ProgressDialog dialog;
        List<Message> titles;
        private ListActivity activity;
        //private List<Message> messages;
        public ProgressTask(ListActivity activity) {
            this.activity = activity;
            context = activity;
            dialog = new ProgressDialog(context);
        }



        /** progress dialog to show user that the backup is processing. */

        /** application context. */
        private Context context;

        protected void onPreExecute() {
            this.dialog.setMessage("Progress start");
            this.dialog.show();
        }

            @Override
        protected void onPostExecute(final Boolean success) {
                List<Message> titles = new ArrayList<Message>(messages.size());
                for (Message msg : messages){
                    titles.add(msg);
                }
                MessageListAdapter adapter = new MessageListAdapter(activity, titles);
                activity.setListAdapter(adapter);
                adapter.notifyDataSetChanged();

                if (dialog.isShowing()) {
                dialog.dismiss();
            }

            if (success) {
                Toast.makeText(context, "OK", Toast.LENGTH_LONG).show();
            } else {
                Toast.makeText(context, "Error", Toast.LENGTH_LONG).show();
            }
        }

        protected Boolean doInBackground(final String... args) {
            try{    
                BaseFeedParser parser = new BaseFeedParser();
                messages = parser.parse();


                return true;
             } catch (Exception e){
                Log.e("tag", "error", e);
                return false;
             }
          }


    }

}

Have a look here

查看更多
Rolldiameter
3楼-- · 2019-02-16 01:10

Here is a method which when called starts a progressbar

private void downloadText(String urlStr) {

    final String url = urlStr;
     progressDialog = ProgressDialog.show(this, "", "Trying to register...");
    Log.i("First string", urlStr);
try{
    new Thread () {
        public void run() {
            int BUFFER_SIZE = 2000;
            InputStream in = null;
            try{
           msg = Message.obtain();
            msg.what=1;
            }catch(Exception e)
            {
            }

            try {
                in = openHttpConnection(url);
           InputStreamReader isr = new InputStreamReader(in);
                int charRead;
                  text = "";
                  char[] inputBuffer = new char[BUFFER_SIZE];

                      while ((charRead = isr.read(inputBuffer))>0)
                      {                    
                          //---convert the chars to a String---
                          String readString = 
                          String.copyValueOf(inputBuffer, 0, charRead);                    
                          text += readString;
                          inputBuffer = new char[BUFFER_SIZE];
                      }
                     Bundle b = new Bundle();
                        b.putString("text", text);
                        msg.setData(b);
                      in.close();

            }catch (Exception e) {

            //////////////////////////////////////  
                e.printStackTrace();
            }
            try{
            messageHandler.sendMessage(msg);
            }catch(Exception e)
            {
            }
        }
    }.start();
}catch(Exception e)
{

}

}

and here is the handler code

private Handler messageHandler = new Handler() {


    public void handleMessage(Message msg) {
        try{
        super.handleMessage(msg);
        switch (msg.what) {

        case 1:

{ break; } } progressDialog.dismiss(); }catch(Exception e) {

        }
        }

};
查看更多
Summer. ? 凉城
4楼-- · 2019-02-16 01:19

Try this way first Intialize your ProgressDialog

 progressDialog = ProgressDialog.show(this, "", "Trying to ...");

then start a new thread in which you can write your code which needs to be executed and finally in the handler handle the code and end the progessDialog

查看更多
We Are One
5楼-- · 2019-02-16 01:24

Try using Async task as shown below:

try{
class test extends AsyncTask{


     TextView tv_per;
     int mprogress;

    Dialog UpdateDialog = new Dialog(ClassContext);

    @Override
    protected void onPreExecute() {
        // TODO Auto-generated method stub
        mprogress = 0;

        UpdateDialog.setTitle(getResources().getString(R.string.app_name));
        UpdateDialog.setContentView(R.layout.horizontalprogressdialog);
        TextView dialog_message =  (TextView)UpdateDialog.findViewById(R.id.titleTvLeft);
        tv_per = (TextView)UpdateDialog.findViewById(R.id.hpd_tv_percentage);
        dialog_message.setText(getResources().getString(R.string.dialog_retrieving_data));
        dialog_message.setGravity(Gravity.RIGHT);
        UpdateDialog.setCancelable(false);
        UpdateDialog.show();
        super.onPreExecute();
    }



    @Override
    protected void onProgressUpdate(Object... values) {
        // TODO Auto-generated method stub
        ProgressBar update = (ProgressBar)UpdateDialog.findViewById(R.id.horizontalProgressBar);
        update.setProgress((Integer) values[0]);
        int percent =  (Integer) values[0];
        if(percent>=100)
        {
            percent=100;
        }
        tv_per = (TextView)UpdateDialog.findViewById(R.id.hpd_tv_percentage);
         tv_per.setText(""+percent);
    }



    @Override
    protected Object doInBackground(Object... params) {
        // TODO Auto-generated method stub
        //your code
}

        super.onPostExecute(result);
        UpdateDialog.dismiss();
    }

 }
 new test().execute(null);

 }
catch(Exception e)
{
 e.printStackTrace();
}
查看更多
登录 后发表回答