0
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.initial_layout); 

    // progress bar 
    pb = (ProgressBar) findViewById(R.id.progressBar); 
    pb.setVisibility(View.VISIBLE); 
    new Thread(new Runnable() { 
     @Override 
     public void run() { 
      while (progressStatus < 100) { 
       progressStatus += 1; 
       pbHandler.post(new Runnable() { 
        @Override 
        public void run() { 
         pb.setProgress(progressStatus); 
        } 
       }); 
       try { 
        Thread.sleep(70); 
       }catch (Exception e) { 
        e.printStackTrace(); 
       } 
      } 
      if (pb.getProgress() >= 95) { 
       Intent i1 = new Intent(initialActivity.this,startingActivity.class); 
       startActivity(i1); 
      } 
     } 
    }).start(); 
} 

我的目標是自動加載下一個活動,當進度條完成加載而不觸發任何其他事件,但我似乎無法做到這一點。我猜想線程有些問題,我是一個begginer。任何幫助讚賞。問題加載下一個活動

回答

0

定義自定義界面,給你回電話時進度完成:

public interface OnProgressFinishListener{ 
    public void onProgressFinish(); 
} 

使用AsyncTask更新進度:

public void startProgress(final OnProgressFinishListener onProgressFinishListener){ 
    new AsyncTask<Void,Integer,Integer>(){ 
     @Override 
     protected Integer doInBackground(Void... params) { 
      while (progressStatus < 100) { 
       progressStatus += 1; 
       publishProgress(progressStatus); 

       try { 
         Thread.sleep(70); 
       }catch (Exception e) { 
         e.printStackTrace(); 
       } 
      } 
      return progressStatus; 
     } 

     @Override 
     protected void onProgressUpdate(Integer... values) { 
     super.onProgressUpdate(values); 
     pb.setProgress(values[0]); 
     } 

     @Override 
     protected void onPostExecute(Integer progress) { 
     super.onPostExecute(progress); 
     if(progress==100){ 
      onProgressFinishListener.onProgressFinish(); 
     } 
     } 
    }.execute(); 
} 

如何實現自定義的接口:

pb = (ProgressBar) findViewById(R.id.progressBar); 
pb.setVisibility(View.VISIBLE); 
startProgress(new OnProgressFinishListener() { 
    @Override 
    public void onProgressFinish() { 
     pb.setVisibility(View.GONE); 
     Toast.makeText(MainActivity.this,"Progress Finish",Toast.LENGTH_SHORT).show(); 
    } 
}); 
2
You have to start the activity from the main thread. Consider executing the runnable from a handler. ` Handler handler = new Handler(); 
      handler.postDelayed(new Runnable() { 
     @Override 
     public void run() { 
      while (progressStatus < 100) { 
       progressStatus += 1; 
       pbHandler.post(new Runnable() { 
        @Override 
        public void run() { 
         pb.setProgress(progressStatus); 
        } 
       }); 
       try { 
        Thread.sleep(70); 
       }catch (Exception e) { 
        e.printStackTrace(); 
       } 
      } 
      if (pb.getProgress() >= 95) { 
       Intent i1 = new Intent(initialActivity.this,startingActivity.class); 
       startActivity(i1); 
      } 
     } 
    },1000); 
return;` 
+0

似乎沒有工作 – 2014-12-05 08:47:43

0
if (pb.getProgress() >= 95) { 
       Intent i1 = new Intent(initialActivity.this,startingActivity.class); 
       startActivity(i1); 
      } 

上述不正確的

if (pb.getProgress() >= 95) { 
       Intent i1 = new Intent(context,startingActivity.class); 
       startActivity(i1); 
      } 

存儲在活動的成員變量的當前活動的上下文的代碼;

public Context context = getApplicationContext(); 

甚至更​​好的解決方案是使用AsynTask

例如

http://programmerguru.com/android-tutorial/android-asynctask-example/

+0

不幸的是,空已停止 – 2014-12-05 09:01:52

+0

嘗試使用AsynTask – 2014-12-05 09:35:33