2014-01-30 3 views
1

Мне нужно подождать несколько секунд в приложении для Android, и я хочу показать индикатор выполнения в течение этого времени, как я могу это сделать?Показывать ProgressBar в течение нескольких секунд в Android

, например:

@Override 
protected void onCreate(Bundle savedInstanceState) { 

    timeForShow(5 //second); 

} 
. 
. 
. 

private void timeForShow(long mytime){ 

myprogress.setVisibility(View.VISIBLE); 
Waiting for mytime... 
myprogress.setVisibility(View.GONE); 

} 

это мой код, но он не работает:

Long timerforprogressbar ; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 

    timerforprogressbar = (long) 5000 ; 
    new MyProgressBar().execute((Void)null); 

} 
. 

. 

. 


class MyProgressBar extends AsyncTask<Void, Void, Void>{ 

    @Override 
    protected Void doInBackground(Void... params) { 
     // TODO Auto-generated method stub 
     progressbar.setVisibility(View.VISIBLE); 
     try { 
      Thread.sleep(timerforprogressbar); 
     } catch (InterruptedException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
     return null; 
    } 

    @Override 
    protected void onPostExecute(Void result) { 
     // TODO Auto-generated method stub 
     super.onPostExecute(result); 
     progressbar.setVisibility(View.GONE); 
    } 

} 

мой прогресс бар:

<ProgressBar 
     android:id="@+id/progressBar" 
     style="?android:attr/progressBarStyleLarge" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:visibility="gone" 
     android:indeterminateDrawable="@drawable/progress" > 
    </ProgressBar> 

прогрессбар мой прогресс бар , PLZ помочь мне, tnx.

+0

Я попытался дать ответ, но я хотел бы еще некоторые детали вашей проблемы. Вы говорите, что это не работает. Что это делает неправильно? Не отображается ли индикатор прогресса, или как он не ведет себя так, как вы ожидаете? – cYrixmorten

+0

У меня есть asynctask: http://paste.ubuntu.com/6846131/. это синтаксический анализ xml. теперь я создал функцию: http://paste.ubuntu.com/6846146/. Я хотел показать свой прогресс во второй раз (пользовательское время). Но моего прогресса не видно! – user3103823

+0

Прежде всего, doInBackground работает в фоновом потоке, не нужно иметь executeThread. Во-вторых, как я упоминал в своем ответе, попробуйте и создайте progressdialog программно вместо этого, плохо сделайте редактирование моего ответа, продемонстрировав его через несколько секунд. – cYrixmorten

ответ

0

В качестве более простого решения, чем в AsyncTask, вы всегда можете посмотреть в использовании CountDownTimer для этого действия.

1

Для вашего конкретного случая использования было бы проще использовать Handler:

new Handler().postDelayed(new Runnable() { 

    @Override 
    public void run() { 
     progressbar.setVisibility(View.GONE); 
    } 

}, timerforprogressbar); 

Вы не упоминаете, как устроен ваш прогрессбара, но если вы хотите просто неопределенная прогресс, чтобы показать, то его построение программно будет быть самой простой вещью, которую я думаю.

private ProgressDialog working_dialog; 

private void showWorkingDialog() { 
    working_dialog = ProgressDialog.show(context, "","Working please wait...", true); 
} 

private void removeWorkingDialog() { 
    if (working_dialog != null) { 
     working_dialog.dismiss(); 
     working_dialog = null; 
    } 
} 

Что бы сделать код выглядит следующим образом:

showWorkingDialog(); 

new Handler().postDelayed(new Runnable() { 

    @Override 
    public void run() { 
     removeWorkingDialog(); 
    } 

}, timerforprogressbar); 
0

Если вы выполняете задание в AsyncTask doInBackground(), то вы можете начать свой ProgressBar в onPreExecute() и отключить его в onPostExecute ().

0

Вы всегда можете использовать CountDownTimer:

public void timer() { 

    countDownTimer=new CountDownTimer(20000, 1000) { //display a delay of 20 seconds 

     public void onTick(long millisUntilFinished) { 


      if (somethingToBreakTheCount) 
       countDownTimer.onFinish(); 

      txtDebug.setText("seconds remaining: " + millisUntilFinished/1000); 
     } 

     public void onFinish() { 
      txtDebug.setText("Done!"); 
      finish(); 
     } 
    }.start(); 
} 
Смежные вопросы