在Android中显示ProgressBar几秒钟

时间:2014-01-30 20:59:11

标签: android progress-bar

我必须在我的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。

6 个答案:

答案 0 :(得分:2)

对于您的特定用例,使用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);

答案 1 :(得分:1)

//我们可以通过使用协程来实现。
//只需启动一个协程,并在几毫秒后更改调度程序上下文即可更改进度条的进度。
//在显示到下一个片段之前,我在这里显示了1秒钟的进度。

CoroutineScope(Dispatchers.IO).launch {
                for (i in 0..100) {
                    delay(10)
                    withContext(Dispatchers.Main) {
                        binding.progressBar.progress = i
                    }
                }
        //Navigate to next fragment using nav contorller or with Intents for next Activity
        navController.navigate(R.id.action_startFragment_to_listFragment)

}

答案 2 :(得分:0)

Updating progress dialog in Activity from AsyncTask

有一种用于进度更新的异步任务的方法。

这是一个更好的帖子链接

答案 3 :(得分:0)

作为比AsyncTask更简单的解决方案,您始终可以考虑使用CountDownTimer来执行此操作。

答案 4 :(得分:0)

如果您在AsyncTask doInBackground()中执行任务,那么您可以在onPreExecute()中启动progressBar并在onPostExecute()中禁用它。

答案 5 :(得分: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();
}