2016-05-31 23 views
0

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={"[email protected]"}; 
     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); 

    } 
} 

答えて

0

このコードは、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を使用するので、あなたは私をお勧めしていない、あなたの活動のクラス

+0

IDEは "super.onPostExecute();"について、 "保護された文字列doInBackground(Void ... arg0)"と "(" –

+0

今、私は答えを編集し、今すぐ動作します! –

+0

今、私はエミュレーターをランチしています....そして、完成した作成についての時間を追加したいのですか? –

2

あなたのフラグメントに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()に、ProgressDialogを、最後にdismiss()onPostExecute()に表示してください。

+0

から

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

を使ってAsyncTask上記の呼び出し? –

+0

@ Markus 'AsyncTask'を使うことをお勧めします。あなたはそれを使っていないことがわかります。 –

+0

今私はAsyncTaskを書いていますが、私は間違って書くかもしれません...私はAsyncTaskでコードを編集します、あなたは私が良い方法で書いていると私に言うことができますか? –

関連する問題