如何使用凌空安卓显示进度条更新



我在进度条上显示进度时遇到问题。

我有使用 Volley 调用我的服务器的函数,当返回结果时,我实现了一个将数据返回给我的活动的回调。

像这样:

public static void saveData(Data data, final VolleyCallbackJsonObject callback){
  ...
  callback.onSuccessResponse(new JSONObject());
  ...
}

假设该函数在循环中调用,如下所示:

for(int i = 1; i<=5; i++){
   final int copyIndex = i;
   MyClass.saveData(new Data(i), new VolleyCallbackJsonObject() {
      @Override
         public void onSuccessResponse(JSONObject result) {
           callFunctionForShowAndUpdateProgress(copyIndex);
         }
      })
  }
}

我想显示一个进度条,显示进度从 1/5 到 5/5 的条形图

所以我在我的活动类中有我的函数:

public Class Test extends Activity{
  private ProgressBar pb;
  public void callFunctionForShowAndUpdateProgress(int index){
     if(index == 1){
        pb = (ProgressBar) findViewById(R.id.pbLoading);
        pb.setMax(5);
        pb.setIndeterminate(false);
        pb.setVisibility(View.VISIBLE);
     }
     if(pb != null){
       pb.setProgress(index);
     }
   if(index == 5){
     pb.postDelayed(new Runnable() {
        @Override
        public void run() {
           pb.setVisibility(View.GONE);
        }
     }, 3000);
   }
  }
}

我的问题是进度条没有设置进度,但它只显示在最后,所以有 5/5 而不是显示进度步骤(1/5、2/5、3/5、4/5(,然后它会在 3 秒后隐藏如何在 postDelay 上指定。

那么我该如何显示所有步骤?出了什么问题?

尝试在方法"onSuccessResponse"中发布延迟方法"callFunctionForShowAndUpdateProgress",而不是您已经进行的postDelay,因为您所做的延迟仅在i = 5时发生,因此从技术上讲,进度经过2,3和4,但您看不到它。

在"onSuccessResponse"中试试这个:

Handler handler = new Handler();
handler.postDelayed(new Runnable() {
    @Override
    public void run() {
                  callFunctionForShowAndUpdateProgress(copyIndex);
    }
 }, 3000);



顺便说一下,当方法'callFunctionForShowAndUpdateProgress'被调用时'onSuccessResponse' 索引最初为 1,这很好,编译器随后将转到第二个 if 语句

if(pb != null){
   pb.setProgress(index);
}

并且会执行它,因为那里的条件是正确的,它不会引起问题,但保持这样不是一个好的做法,解决这个问题可以防止编译器通过添加 else 进入这个 if 语句。

我希望这有所帮助

更改您的循环调用函数,如下所示,然后检查,

int copyIndex = 1;
callFunctionForShowAndUpdateProgress(copyIndex);
for(int i = 1; i<=5; i++)
{
     MyClass.saveData(new Data(i), new VolleyCallbackJsonObject() 
     {
        @Override
        public void onSuccessResponse(JSONObject result) 
        {
          copyIndex++;
          callFunctionForShowAndUpdateProgress(copyIndex);
        }
     })
}

最新更新