【问题标题】:How to stop and start a ProgressBar如何停止和启动 ProgressBar
【发布时间】:2012-07-04 01:59:55
【问题描述】:

我无法停止ProgressBar。它的样式是ProgressBarStylesmall。如何启动和停止循环小ProgressBar

【问题讨论】:

  • 让可见性消失并在您想展示时可见。

标签: android progress-bar


【解决方案1】:

有“不确定”的进度条,它旋转和“确定”,而没有。坚持后者,你会没事的。要使其“确定”,请将进度属性添加到它的 xml 元素中,设置

 style="?android:attr/progressBarStyleHorizontal"
        android:indeterminate="false"

Android Circular Determinate ProgressBar

【讨论】:

    【解决方案2】:

    遇到了这个老话题,注意到每个人都在谈论 ProgressDialog。需要注意的是 ProgressDialog 已被弃用,而应使用 ProgressBar 类。

    来自安卓文档:

    避免 ProgressDialog

    Android 包含另一个名为 ProgressDialog 的对话框类,它显示带有进度条的对话框。此小部件已弃用,因为它会阻止用户在显示进度时与应用程序交互。如果您需要指示加载或不确定的进度,您应该遵循Progress & Activity 的设计指南并在布局中使用ProgressBar,而不是使用 ProgressDialog。

    【讨论】:

      【解决方案3】:

      默认情况下,您可以让 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();
          }
      

      希望对你有所帮助。

      【讨论】:

        【解决方案4】:

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

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

        阅读 GONE VS。隐形here

        【讨论】:

          【解决方案5】:

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

          【讨论】:

          • setAlpha 确实有效,但最好只更改可见性
          【解决方案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 期间显示它。
          • 你为什么要让生活变得那么复杂并使用异步任务?这可以在主线程上完成...
          • 要设置可见性,您还可以使用 progressBar.setVisibility(ProgressBar.VISIBLE) 来显示,progressBar.setVisibility(ProgressBar.INVISIBLE) 隐藏但位置仍然出现或 progressBar.setVisibility(ProgressBar.GONE) 到隐藏最小化。
          【解决方案7】:

          我不知道这是否有帮助,但您可以使用 ProgressDialog。假设您有一个正在运行的ProgressDialog,名为progressDialog,您可以使用progressDialog.dismiss();。只需确保您要关闭的 ProgressDialog 的实例是实际显示的 ProgressDialog。您可以通过progressDialog.isShowing(); 进行检查。开始ProgressDialog

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

          默认情况下,ProgressDialog UI 是圆形的,就像您需要的一样。

          【讨论】:

          • 它显示了对话框和里面的循环,我只想显示循环动画。我的问题是如何停止循环
          • 我不明白。您想停止 progressDialog 或将其 UI 更改为不是循环​​的吗?
          • 在android sdk中,它们只是循环控制,我只想通过代码启动和停止它。我不需要进度条对话框
          • 您可以将进度条的可见性设置为不可见或通过progressbar.setVisibility(View.INVISIBLE);或 progressBar.setVisibility(View.GONE);正如您问题中先前的评论所建议的那样。
          猜你喜欢
          • 1970-01-01
          • 2012-01-22
          • 2012-08-16
          • 2012-07-31
          • 2018-06-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多