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

Моя цель - автоматически загружать следующую активность, когда индикатор выполнения заканчивает загрузку без какого-либо другого события, но я не могу этого сделать. Я думаю, что что-то не так с Thread, я начинаю. Любая помощь оценивается.Ошибка в загруженном виде

ответ

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

не кажется, работает –

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

К сожалению, нуль остановился –

+0

попробуйте использовать AsynTask –

 Смежные вопросы

  • Нет связанных вопросов^_^