如何停止和启动进度条

34

我无法停止一个ProgressBar,它的样式是ProgressBarStylesmall。如何开始和停止一个圆形、小的ProgressBar


7
随时使可见性消失或显示,以便在需要时展示。 - Padma Kumar
7个回答

20

默认情况下,您可以按以下方式使progressBar可见并在不需要时隐藏它:

progressBar.setVisibility(View.GONE);

如果你想通过编程来控制它,那么可以使用以下方式实现:

progressBar.setVisibility(View.VISIBLE); //to show
progressBar.setVisibility(View.GONE); // to hide

你甚至可以使用ProgressDialog:

private ProgressDialog progressDialog;
...

public void showProgressDialog() {
    if (progressDialog == null) {
        progressDialog = new ProgressDialog(PhotographerDetailActivity.this);
        progressDialog.setIndeterminate(true);
        progressDialog.setCancelable(false);
    }
    progressDialog.setMessage("your message");
    progressDialog.show();
}

public void dismissProgressDialog() {
    if (progressDialog != null ) {
        progressDialog.dismiss();
    }

希望它能够对你有所帮助。


6

您需要处理AsyncTasks。

/*
 * We set the visibility to true. If it was already visible 
 * there's no need of doing this but we do it for the sake of readability.
 */
final ProgressBar progressBar = (ProgressBar)findViewById(R.id.progressBar1);
progressBar.setVisibility(View.VISIBLE);
new AsyncTask<Void,Void,Void>(){

//The variables you need to set go here

    @Override
    protected Void doInBackground(final Void... params){
         // Do your loading here. Don't touch any views from here, and then return null
         return null;
    }


    @Override
    protected void onPostExecute(final Void result){
         // Update your views here
         progressBar.setVisibility(View.GONE);
    }
}.execute()

如果你正在加载一个列表或其他内容,只需在AsyncTask内创建一个空列表作为字段,在doInBackground期间填充它,然后在onPostExecute期间显示它。 - Charlie-Blake
为什么要让代码变得那么复杂,使用异步任务呢?这可以在主线程上完成... - GabrielWeis
要设置可见性,您也可以使用progressBar.setVisibility(ProgressBar.VISIBLE)来显示,progressBar.setVisibility(ProgressBar.INVISIBLE)来隐藏但仍然出现,或者progressBar.setVisibility(ProgressBar.GONE)来最小化隐藏。 - Stefan Babos

4

隐藏进度条: progressBar.setVisibility(View.INVISIBLE);

显示进度条: progressBar.setVisibility(View.VISIBLE);

关于GONE和INVISIBLE的区别,可以在这里阅读。


4
我发现这个旧话题中大家都在谈论ProgressDialog。应该注意到ProgressDialog已经被弃用,ProgressBar类应该代替它来使用。
根据Android文档:
避免使用ProgressDialog
Android还包括另一个对话框类——ProgressDialog,它显示一个带有进度条的对话框。该小部件已弃用,因为它在显示进度时会阻止用户与应用程序进行交互。如果你需要指示加载或不定进度,则应按照设计指南Progress & Activity使用布局中的ProgressBar,而不是使用ProgressDialog。

4

我不知道这是否有帮助,但你可以使用一个 ProgressDialog。假设你有一个正在运行的名为 progressDialogProgressDialog,你可以使用 progressDialog.dismiss();。只需确保你要解除显示的 ProgressDialog 实例是实际显示的 ProgressDialog。你可以使用 progressDialog.isShowing(); 来检查它。要启动 ProgressDialog

progressDialog = ProgressDialog
                    .show(myActivityContext,
                            "ProgressDialog Title",
                                "ProgressDialog Body");

默认情况下,ProgressDialog 的用户界面是圆形的,就像您需要的那样。

1
它显示了对话框和其中的圆形,我只想显示圆形动画。我的问题是如何停止圆形动画。 - saqibabbasi
我不明白。你是想停止progressDialog还是改变它的UI,使其不再是圆形的? - AggelosK
在Android SDK中,只有圆形控件,我只想通过代码启动和停止它。我不需要进度条对话框。 - saqibabbasi
1
你可以通过progressbar.setVisibility(View.INVISIBLE); 或者progressBar.setVisibility(View.GONE); 来将进度条设置为不可见或消失,正如之前在你的问题中的评论所建议的那样。 - AggelosK

2
有两种进度条,一种是旋转的“不确定”的进度条,另一种是“确定”的进度条。建议使用后者,效果更佳。要将其变为“确定”的进度条,请在xml元素中添加progress属性。
 style="?android:attr/progressBarStyleHorizontal"
        android:indeterminate="false"

Android圆形确定性进度条


-3

任务开始时将setAlpha值设置为1,任务完成后将其改回0, 但setAlpha仅适用于API级别11或更高版本


2
setAlpha确实可以工作,但更好的方法是直接改变可见性。 - DominicM

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接