How to show a progress bar during the creation of

2020-05-06 13:03发布

How can I show a progress bar when I click a button during the creation of a PDF file and hide it when I finished creating the file?

  public class TwoFragment extends android.support.v4.app.Fragment {

    private View v;
    Intent chooser=null;
    String myInt="";
    String ciao="";
    private String string="";
    private ProgressBar pdfProgress;
    ProgressTask task;



    public TwoFragment() {
        // Required empty public constructor
    }


    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment

        View rootView = inflater.inflate(R.layout.fragment_two, container, false);


        Button mButton = (Button) rootView.findViewById(R.id.newbutton);
        mButton.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {

                //sendemail();
               // pdfProgress.setVisibility(View.GONE);

               /* pdfProgress.setVisibility(View.VISIBLE);
                createPDF();
                pdfProgress.setVisibility(View.GONE);
                viewPDF();*/
                /*MyAsyncTask myTask = new MyAsyncTask();
                myTask.execute();
*/
                showProgress();



            }
        });
        TextView titolo3 = (TextView)rootView.findViewById(R.id.result);
        TextView titolo2 = (TextView)rootView.findViewById(R.id.result2);
        TextView titolo4 = (TextView)rootView.findViewById(R.id.resultpizze);
        pdfProgress = (ProgressBar)rootView.findViewById(R.id.progressbar);
        pdfProgress.setVisibility(View.GONE);

        //pdfProgress.setVisibility(View.INVISIBLE);


        //TextView titolo = (TextView)rootView.findViewById(R.id.quantità3);
     /*  class MyAsyncTask extends AsyncTask<Void, Void, Void> {
            @Override
            protected Void doInBackground(Void... params) {
                // This runs in new thread!!!
                // Always run long operations in another thread, so GUI will never be blocked
                createPDF();

                return null;
            }

            @Override
            protected void onPostExecute(Void v) {
                // This runs in MAIN thread, after the job's done.
                // You always have to update gui from main thread
                pdfProgress.setVisibility(View.GONE);
                viewPDF();
            }
        }
*/
  Bundle bundle2=getArguments();
        if(bundle2 != null){
             string = bundle2.getString("scelta2");
            titolo3.setText(string);

        }

    /*    Bundle bundle2=getArguments();
        if(bundle2 != null){
           //  myInt = bundle2.getString("scelta2",myInt);
            cacca=bundle2.getString("result",null);

            //cacca=myInt;
           // Log.d("ciao",cacca);
           titolo3.setText(cacca);
        }*/

        //titolo3.setText(myInt);


    /*    Bundle bundle3=getArguments();
        if(bundle3 != null){
           // String myInt3 = bundle3.getString("totalebirre", null);
           //  cazzo2=Integer.parseInt(myInt3);
           int cazzo2=bundle3.getInt("totalebirre");
            titolo2.setText(String.valueOf(cazzo2));



        }
        Bundle bundle=getArguments();
        if(bundle != null){
            // String myInt2 = bundle2.getString("totalepizze", null);
            //   cazzo=Integer.parseInt(myInt2);
            //titolo2.setText(myInt2);
            String string=bundle.getString("scelta3", null);
             titolo4.setText(string);

        }
*/


        return rootView;
    }


/* public void sendemail(){

        Intent intent = new Intent(Intent.ACTION_SEND);
        intent.setData(Uri.parse("mailto:"));
        String[] to={"marco_marcoletto@hotmail.it"};
        intent.putExtra(Intent.EXTRA_EMAIL,to);
        intent.putExtra(Intent.EXTRA_SUBJECT, "ciao");
        intent.putExtra(Intent.EXTRA_TEXT, "zao");
        intent.setType("message/rfc822");
        chooser=intent.createChooser(intent,"manda email");
        startActivity(chooser);
    }*/

   //@TargetApi(Build.VERSION_CODES.M)
    public void createPDF() {

       Document doc = new Document();

       try {
           String path = Environment.getExternalStorageDirectory()
                   .getAbsolutePath() + "/droidText";

           File dir = new File(path);
           if (!dir.exists())
               dir.mkdirs();

           Log.d("PDFCreator", "PDF Path: " + path);

           //File file = new File(dir, "sample.pdf");
           File file = new File(dir, "salve.pdf");

           FileOutputStream fOut = new FileOutputStream(file);

           PdfWriter.getInstance(doc, fOut);

           // open the document
           doc.open();
           ByteArrayOutputStream stream = new ByteArrayOutputStream();
           Bitmap bitmap = BitmapFactory.decodeResource(getContext()
                   .getResources(), R.drawable.androtuto);
           bitmap.compress(Bitmap.CompressFormat.JPEG, 100, stream);
           Image myImg = Image.getInstance(stream.toByteArray());
           myImg.setAlignment(Image.MIDDLE);

           // add image to document
           doc.add(myImg);
           Paragraph p1 = new Paragraph(string);
           Font paraFont = new Font(Font.COURIER);
           p1.setAlignment(Paragraph.ALIGN_CENTER);
           p1.setFont(paraFont);




           // add paragraph to document
           doc.add(p1);

           Paragraph p2 = new Paragraph("Bonjour Android Tuto");

           Font paraFont2 = new Font(Font.COURIER, 14.0f, Color.GREEN);
           p2.setAlignment(Paragraph.ALIGN_CENTER);
           p2.setFont(paraFont2);

           doc.add(p2);


           stream = new ByteArrayOutputStream();
           bitmap = BitmapFactory.decodeResource(getContext()
                   .getResources(), R.drawable.android);
           bitmap.compress(Bitmap.CompressFormat.JPEG, 100, stream);
           myImg = Image.getInstance(stream.toByteArray());
           myImg.setAlignment(Image.MIDDLE);

           // add image to document
           doc.add(myImg);

           // set footer
           Phrase footerText = new Phrase("Pied de page ");
           HeaderFooter pdfFooter = new HeaderFooter(footerText, false);
           doc.setFooter(pdfFooter);

       } catch (DocumentException de) {
          // Log.e("PDFCreator", "DocumentException:" + de);
           Log.e("PDFCreator", "DocumentException:" + de.getMessage());
       } catch (IOException e) {
         //  Log.e("PDFCreator", "ioException:" + e);
           Log.e("PDFCreator", "DocumentException:" + e.getMessage());


       } finally {
           doc.close();
       }

   }
    public void viewPDF(){
        String path = "/sdcard/droidText/salve.pdf";

        File targetFile = new File(path);
        Uri targetUri = Uri.fromFile(targetFile);

        Intent intent;
        intent = new Intent(Intent.ACTION_VIEW);
        intent.setDataAndType(targetUri, "application/pdf");

        startActivity(intent);
    }
    private class ProgressTask extends AsyncTask<Integer,Integer,Void> {

        protected void onPreExecute() {
            pdfProgress.setMax(100); // set maximum progress to 100.
        }

        protected void onCancelled() {
            pdfProgress.setMax(0); // stop the progress
        }
        protected Void doInBackground(Integer... params) {
            int start=params[0];
            for(int i=start;i<=100;i+=5){
                try {
                    boolean cancelled=isCancelled();
                    if(!cancelled) {
                        publishProgress(i);
                        Log.v("Progress","increment " + i);
                        //onProgressUpdate(i);
                        SystemClock.sleep(1000);
                    }
                    createPDF();
                } catch (Exception e) {
                    Log.e("Error", e.toString());
                }
            }
            return null;
        }
        protected void onProgressUpdate(Integer... values) {

            // increment progress bar by progress value
            //setProgress(10);
        }
        protected void onPostExecute(Void result) {
            // async task finished
            Log.v("Progress", "Finished");
            viewPDF();
        }

    }
    public void showProgress() {
        task = new ProgressTask();
        // start progress bar with initial progress 10
        ///////////////////task.execute(10,10,null);
        task.execute(10);

    }
}

2条回答
太酷不给撩
2楼-- · 2020-05-06 13:17

Define a ProgressDialog in your Fragment as follows. The following code will add a ProgessDialog; to update it to show a Progress Bar too, read this.

private ProgressDialog processingDialog;

Now, in your onClick()

mButton.setOnClickListener(new View.OnClickListener() {
       public void onClick(View v) {
           processingDialog = ProgressDialog.show(this, "Creating PDF", "Please wait ...", true, false);
           createPDF();
           processingDialog.dismiss();
           viewPDF();
            }
        });  

This should do the task, however, I have some more recommendations for you. As creating a PDF (I assume) will be time consuming, it might not be a good idea to do it on the UI Thread. Instead, use an AsyncTask to generate your PDF in doInBackground(), show the ProgressDialog, and finally dismiss() it in onPostExecute().

查看更多
Luminary・发光体
3楼-- · 2020-05-06 13:38

This code will do what you want using AsyncTask which is reccomended way of doing this!

private class MakePDF extends AsyncTask<Void, Void, Void> {

       private ProgressDialog processingDialog;
            Context cnt = null;

           MakePDF(Context cnt)
                 {
              this.cnt = cnt;
                  }

                @Override
                protected void onPreExecute() {
                    super.onPreExecute();

                    processingDialog = ProgressDialog.show( this.cnt, "Creating PDF", "Please wait ...", true, false);    

                }

                @Override
                protected Void doInBackground(Void... arg0) {
                          createPDF();                 
                         return null;
                }

                @Override
                protected void onPostExecute(Void aVoid) {
                    super.onPostExecute(aVoid);
                   processingDialog.dismiss();
                   viewPDF();
                    }
            }

Now call above AsyncTask using

new MakePDF(ActivityName.this).execute(); //here in constructor pass context of an calling activity.

from your activity class

查看更多
登录 后发表回答