代码之家  ›  专栏  ›  技术社区  ›  user6374907

如何在创建文件时显示进度条?

  •  0
  • user6374907  · 技术社区  · 9 年前

    如何在创建PDF文件期间单击按钮时显示进度条,并在创建完文件后隐藏进度条?

      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 回复  |  直到 9 年前
        1
  •  2
  •   Abdul Fatir    9 年前

    定义一个 ProgressDialog 在您的片段中,如下所示。以下代码将添加 ProgessDialog ; 要更新它以显示进度条,请阅读 this .

    private ProgressDialog processingDialog;
    

    现在,在你的 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();
                }
            });  
    

    这应该可以完成任务,不过,我还有一些建议给你。由于创建PDF(我认为)会很耗时,所以在UI线程上创建可能不是一个好主意。相反,请使用 AsyncTask 在中生成PDF doInBackground() ,显示 进度对话框 ,最后 dismiss() 它在 onPostExecute() .

        2
  •  0
  •   U.Swap    9 年前

    这段代码将使用AsyncTask做您想做的事情,这是推荐的方法!

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

    现在使用以下命令调用上面的AsyncTask

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

    从你的活动课