我在进度条上显示进度时遇到问题。
我有使用 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);
}
})
}