2017-12-05 4 views
1

私はループ実行が終了するまでProgressBarを表示する必要があるAndroidアプリケーションを開発しています。実行後、nextActivityに移動します。ループ実行が終了するまでプログレスバーを追加する方法は?

はここにあなたがここに二つの問題を持っている私のJavaコード

public class Image_Recognition extends Activity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_image__recognition); 

     Button btnNextPage = (Button) findViewById(R.id.btnNextPage); 


      btnNextPage.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View view) { 
        TextRecognizer textRecognizer = new TextRecognizer.Builder(getApplicationContext()).build(); 

         Frame frame = new Frame.Builder().setBitmap(bitmap).build(); 
         SparseArray<TextBlock> items = textRecognizer.detect(frame); 
         StringBuilder stringBuilder = new StringBuilder(); 
         for (int i = 0; i < items.size(); ++i) { 
          TextBlock item = items.valueAt(i); 
          stringBuilder.append(item.getValue()); 
          stringBuilder.append("\n"); 
         } 
         stringBuilder.append('.'); 
         txtResult.setText(stringBuilder.toString()); 


         str = stringBuilder.toString(); 
         Intent myintent = new Intent(Image_Recognition.this, ReminderAddActivity.class); 
         myintent.putExtra("translate", str); 
         startActivity(myintent); 

       } 
      }); 
     } 
    //} 
} 
+0

チェックこの:https://stackoverflow.com/a/10446247/3001746 –

+0

しかし、私は限りループの実行時にプログレスバーをしたいです。.. –

答えて

0

にあなたはこれを試すことができます。

final ProgressDialog dialog = new ProgressDialog(Image_Recognition.this); 
btnNextPage.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View view) { 



        dialog.show(Image_Recognition.this, "", "Please wait...", true); 



        new Handler().postDelayed(new Runnable() { 
         @Override 
         public void run() { 

          TextRecognizer textRecognizer = new TextRecognizer.Builder(getApplicationContext()).build(); 

          if (!textRecognizer.isOperational()) 
           Log.e("ERROR", "Detector dependencies are not yet available"); 
          else { 

           Frame frame = new Frame.Builder().setBitmap(bitmap).build(); 
           SparseArray<TextBlock> items = textRecognizer.detect(frame); 
           StringBuilder stringBuilder = new StringBuilder(); 
           for (int i = 0; i < items.size(); ++i) { 
            TextBlock item = items.valueAt(i); 
            stringBuilder.append(item.getValue()); 
            stringBuilder.append("\n"); 
           } 
           stringBuilder.append('.'); 
           txtResult.setText(stringBuilder.toString()); 

           str = stringBuilder.toString(); 
          } 

          runOnUiThread(new Runnable() { 
           @Override 
           public void run() { 
            dialog.dismiss(); 
            dialog.setCancelable(true); 
            Intent myintent = new Intent(Image_Recognition.this, ReminderAddActivity.class); 
            myintent.putExtra("translate", str); 
            startActivity(myintent); 
           } 
          }); 
         } 
        },5000); 
0

です。

あなたがXMLでProgressDialogまたはProgressBarを使用し、IUの残りの部分を隠しながら、それを表示することができプログレスバー、。 UI

あなたはあなたのループが終わってまで、あなたのUIをブロックします、あなたは進歩のいくつかの並べ替えを示していても、それがブロックされることを意味し、リスナーをクリックしてから直接あなたのループを実行しているブロッキング

、あなたがスレッドを開始し、中にあなたのループを実行する必要があります。

あなたは非同期タスクを使用し、doInBackground(であなたのループを実行することができ

final ProgressDialog dialog = new ProgressDialog(Image_Recognition.this); 
     dialog.show(); 

     new Thread(new Runnable() { 
      @Override 
      public void run() { 
       TextRecognizer textRecognizer = new TextRecognizer.Builder(getApplicationContext()).build(); 

       Frame frame = new Frame.Builder().setBitmap(bitmap).build(); 
       SparseArray<TextBlock> items = textRecognizer.detect(frame); 
       StringBuilder stringBuilder = new StringBuilder(); 
       for (int i = 0; i < items.size(); ++i) { 
        TextBlock item = items.valueAt(i); 
        stringBuilder.append(item.getValue()); 
        stringBuilder.append("\n"); 
       } 
       stringBuilder.append('.'); 
       txtResult.setText(stringBuilder.toString()); 

       str = stringBuilder.toString(); 

       runOnUiThread(new Runnable() { 
        @Override 
        public void run() { 
         dialog.dismiss(); 
         Intent myintent = new Intent(Image_Recognition.this, ReminderAddActivity.class); 
         myintent.putExtra("translate", str); 
         startActivity(myintent); 
        } 
       }); 
      } 
     }).start(); 
0

IMPLリスナーをクリックしてくださいここであなたの非常にきれいではないバージョンです)

class MyTask extends AsyncTask<Void, Void, Void> { 
    ProgressDialog pd; 
    public MyTask(ProgressDialog pd){ 
     this.pd=pd; 
    } 
    @Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 
     pd.setMessage("Uploading . . ."); 
     pd.show(); 
     pd.setCancelable(false); 
    } 

    @Override 
    protected Void doInBackground (Void...voids){ 
     for(int i=0;i<10000000;i++){ 
      System.out.print(i); 
     } 
     return null;//download file 
    } 

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

と活動コールnew MyTask(pd).execute();

関連する問題